Submission #629746

#TimeUsernameProblemLanguageResultExecution timeMemory
629746diponkinuTracks in the Snow (BOI13_tracks)C++14
100 / 100
590 ms251544 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
vector<string> snow(4000);
vector<vector<int>> depth(4000,vector<int>(4000)); 
int n,m,ans=1;
bool inside(int x, int y)
{
	if(-1<x&&x<n&&-1<y&&y<m&&snow[x][y]!='.')
	{
		return true;
	}
	return false;
}
signed main() {
	iostream::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n >> m;
	for(int i=0;i<n;i++)
	{
		cin >> snow[i];
	}
	depth[0][0]=1;
	deque<pair<int,int>> q;
	q.push_back({0,0});
	while(q.size())
	{
		pair<int,int> now = q.front();
		q.pop_front();
		ans = max(ans,depth[now.first][now.second]);
		for(int i=0;i<4;i++)
		{
			int x=now.first + dx[i],y=now.second + dy[i];
			if(inside(x,y)&&depth[x][y]==0)
			{
				if(snow[x][y]==snow[now.first][now.second])
				{
					depth[x][y]=depth[now.first][now.second];
					q.push_front({x,y});
				}
				else
				{
					depth[x][y]=depth[now.first][now.second]+1;
					q.push_back({x,y});
				}
			}
		}
	}
	cout<<ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...