Submission #101457

#TimeUsernameProblemLanguageResultExecution timeMemory
101457rocketninja7Tracks in the Snow (BOI13_tracks)C++14
100 / 100
1643 ms88968 KiB
#include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; pair<int, int> dir[]={make_pair(0, -1), make_pair(1, 0), make_pair(0, 1), make_pair(-1, 0)}; int main(){ int H, W; scanf("%d%d", &H, &W); char grid[H][W+1]; for(int i=0;i<H;i++){ scanf("%s", &grid[i]); } int dist[H][W]; for(int i=0;i<H;i++){ for(int j=0;j<W;j++){ dist[i][j]=-1; } } dist[0][0]=1; queue<pair<int, int> > procA; queue<pair<int, int> > procB; procA.push(make_pair(0, 0)); while(!procA.empty()||!procB.empty()){ while(!procA.empty()){ int x=procA.front().first, y=procA.front().second; procA.pop(); for(int i=0;i<4;i++){ if(x+dir[i].first>-1&&x+dir[i].first<H&&y+dir[i].second>-1&&y+dir[i].second<W){ if(grid[x+dir[i].first][y+dir[i].second]!='.'){ if(dist[x+dir[i].first][y+dir[i].second]==-1){ if(grid[x+dir[i].first][y+dir[i].second]==grid[x][y]){ dist[x+dir[i].first][y+dir[i].second]=dist[x][y]; procA.push(make_pair(x+dir[i].first, y+dir[i].second)); } else{ dist[x+dir[i].first][y+dir[i].second]=dist[x][y]+1; procB.push(make_pair(x+dir[i].first, y+dir[i].second)); } } } } } } while(!procB.empty()){ int x=procB.front().first, y=procB.front().second; procB.pop(); for(int i=0;i<4;i++){ if(x+dir[i].first>-1&&x+dir[i].first<H&&y+dir[i].second>-1&&y+dir[i].second<W){ if(grid[x+dir[i].first][y+dir[i].second]!='.'){ if(dist[x+dir[i].first][y+dir[i].second]==-1){ if(grid[x+dir[i].first][y+dir[i].second]==grid[x][y]){ dist[x+dir[i].first][y+dir[i].second]=dist[x][y]; procB.push(make_pair(x+dir[i].first, y+dir[i].second)); } else{ dist[x+dir[i].first][y+dir[i].second]=dist[x][y]+1; procA.push(make_pair(x+dir[i].first, y+dir[i].second)); } } } } } } } int ans=1; for(int i=0;i<H;i++){ for(int j=0;j<W;j++){ ans=max(ans, dist[i][j]); } } printf("%d", ans); return 0; }

Compilation message (stderr)

tracks.cpp: In function 'int main()':
tracks.cpp:14:29: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[(W + 1)]' [-Wformat=]
         scanf("%s", &grid[i]);
                     ~~~~~~~~^
tracks.cpp:11:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &H, &W);
     ~~~~~^~~~~~~~~~~~~~~~
tracks.cpp:14:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s", &grid[i]);
         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...