Submission #1350375

#TimeUsernameProblemLanguageResultExecution timeMemory
1350375Jawad_Akbar_JJClickbait (COCI18_clickbait)C++20
120 / 120
10 ms2352 KiB
#include <iostream>
#include <vector>

using namespace std;
const int N = 1<<10;
string A[N];
int n, m;
vector<int> dfs(int i, int j);

vector<int> traverse_path(int i, int j, int lst){
	if ((A[i][j] == '|' or A[i][j] == '+') and A[i+1][j] == '-'){
		i++;
		while (A[i][j] != '+')
			j--;
		return dfs(i, j);
	}
	if (A[i][j] == '|')
		return traverse_path(i+1, j, j);
	else if (A[i][j] == '-' and lst == j + 1)
		return traverse_path(i, j-1, j);
	else if (A[i][j] == '-')
		return traverse_path(i, j+1, j);
	else if (A[i][j] == '+'){
		if (lst == j and j > 0 and A[i][j-1] != '.')
			return traverse_path(i, j-1, j);
		else if (lst == j)
			return traverse_path(i, j+1, j);
		else
			return traverse_path(i+1, j, j);
	}
}

int getID(int I, int J, int ans){
	for (int i=I+1; ans == 0; i++){
		for (int j=J+1;A[i][j] != '|';j++){
			if (isdigit(A[i][j]))
				ans = ans * 10 + A[i][j] - '0';
		}
	}
	return ans;
}

vector<int> dfs(int i, int j){
	int x = getID(i, j, 0);

	int J = j+1, I = i+1;
	while (A[i][J] == '-')
		J++;
	while (A[I][j] == '|')
		I++;

	vector<int> vec, v;
	while (I > i + 1){
		I--;
		v = {};
		if (j > 0 and A[I][j-1] != '.')
			v = traverse_path(I, j-1, j);
		else if (J + 1 < m and A[I][J+1] != '.')
			v = traverse_path(I, J+1, j);
		vec.insert(vec.end(), v.begin(), v.end());
	}
	vec.push_back(x);
	return vec;
}

int main(){
	cin>>n>>m;

	for (int i=0;i<n;i++)
		cin>>A[i];

	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++){
			if (A[i][j] == '+'){
				for (int k : dfs(i, j))
					cout<<k<<'\n';
				return 0;
			}
		}
	}
}

Compilation message (stderr)

clickbait.cpp: In function 'std::vector<int> traverse_path(int, int, int)':
clickbait.cpp:31:1: warning: control reaches end of non-void function [-Wreturn-type]
   31 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...