Submission #1076384

#TimeUsernameProblemLanguageResultExecution timeMemory
1076384ivazivaTracks in the Snow (BOI13_tracks)C++14
100 / 100
825 ms172896 KiB
#include <bits/stdc++.h> using namespace std; #define MAXN 4001 int h,w; int a[MAXN][MAXN]; int dist[MAXN][MAXN]; deque<pair<int,int>> bfsq; pair<int,int> dir[4]; int ans=0; bool check(int nodex,int nodey) { if (nodex>=1 and nodex<=h and nodey>=1 and nodey<=w and a[nodex][nodey]!='.' and dist[nodex][nodey]==INT_MAX) return true; return false; } void bfs() { for (int i=1;i<=h;i++) { for (int j=1;j<=w;j++) dist[i][j]=INT_MAX; } dist[1][1]=0;bfsq.push_front({1,1}); while (bfsq.empty()==false) { int nodex=bfsq.front().first,nodey=bfsq.front().second;bfsq.pop_front(); ans=max(ans,dist[nodex][nodey]); for (int i=0;i<4;i++) { int sledx=nodex+dir[i].first,sledy=nodey+dir[i].second; if (!check(sledx,sledy)) continue; if (a[sledx][sledy]==a[nodex][nodey]) {dist[sledx][sledy]=dist[nodex][nodey];bfsq.push_front({sledx,sledy});} else {dist[sledx][sledy]=dist[nodex][nodey]+1;bfsq.push_back({sledx,sledy});} } } } int main() { dir[0]={0,1},dir[1]={1,0},dir[2]={0,-1},dir[3]={-1,0}; cin>>h>>w; for (int i=1;i<=h;i++) { string s;cin>>s; for (int j=1;j<=w;j++) a[i][j]=s[j-1]; } bfs(); cout<<ans+1<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...