제출 #1350447

#제출 시각아이디문제언어결과실행 시간메모리
1350447MuhammadSaramClickbait (COCI18_clickbait)C++20
120 / 120
8 ms6468 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(v) v.begin(), v.end()
#define endl '\n'

const int M = 1001;

int val[M][M], x, n, m;
vector<int> nei[M*M], ans;
bool vis[M*M], vis1[M][M];

int dfs(int x,int y)
{
	vis1[x][y]=1;
	for (int i=max(0,x-1);i<=min(x+1,n-1);i++)
		for (int j=max(0,y-1);j<=min(y+1,m-1);j++)
		{
			if (i==x or j==y)
			{
				if (vis1[i][j]) continue;
				if (!val[i][j])
					return dfs(i,j);
				return val[i][j];
			}
		}
}

void fin(int u)
{
	vis[u]=1;
	for (int i:nei[u])
		if (!vis[i])
			fin(i);
	cout<<u<<endl;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL), cout.tie(NULL);

	cin>>n>>m;
	string a[n];
	for (int i=0;i<n;i++)
		cin>>a[i];
	vector<array<int,5>> v;
	for (int i=0;i<n;i++)
	{
		for (int j=0;j<m;j++)
			if ('1'<=a[i][j] && a[i][j]<='9')
			{
				int x,x1,y,y1, val=0;
				for (int k=i-1;k>=0;k--)
					if (a[k][j]=='-' or a[k][j]=='+' or a[k][j]=='|')
					{
						x=k;break;
					}
				for (int k=i+1;k<n;k++)
					if (a[k][j]=='-' or a[k][j]=='+' or a[k][j]=='|')
					{
						x1=k;break;
					}
				for (int k=j+1;k<m;k++)
					if (a[i][k]=='-' or a[i][k]=='+' or a[i][k]=='|')
					{
						y1=k;break;
					}
				for (int k=j-1;k>=0;k--)
					if (a[i][k]=='-' or a[i][k]=='+' or a[i][k]=='|')
					{
						y=k;break;
					}
				for (int k=j;k<m;k++)
				{
					if (a[i][k]<'0' or a[i][k]>'9') break;
					val=val*10+a[i][k]-'0';
				}
				v.push_back({x,x1,y,y1,val});
				j=y1;
			}
	}
	for (auto e:v)
	{
		for (int i=e[0];i<=e[1];i++)
			for (int j=e[2];j<=e[3];j++)
				val[i][j]=e[4];
	}
	for (int i=0;i<n;i++)
		for (int j=0;j<m;j++)
		{
			if (a[i][j]=='.') val[i][j]=-1, vis1[i][j]=1;
			else if(!val[i][j]) val[i][j]=0;
		}
	for (auto e:v)
	{
		for (int i=e[0];i<=e[1];i++)
			for (int j=e[2];j<=e[3];j++)
				vis1[i][j]=1;
		x=e[4];
		for (int i=e[1];i>=e[0];i--)
		{
			if (e[2] && !val[i][e[2]-1])
				nei[x].push_back(dfs(i,e[2]-1));
			if (e[3]+1<m && !val[i][e[3]+1])
				nei[x].push_back(dfs(i,e[3]+1));
		}
		for (int i=e[0];i<=e[1];i++)
			for (int j=e[2];j<=e[3];j++)
				vis1[i][j]=0;
	}
	fin(1);

	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

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