Submission #1208897

#TimeUsernameProblemLanguageResultExecution timeMemory
1208897enzyTracks in the Snow (BOI13_tracks)C++20
100 / 100
739 ms119308 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=4010; char v[maxn][maxn]; int dist[maxn][maxn], dx[]={1,-1,0,0}, dy[]={0,0,1,-1}, n, m; bool in(int x, int y){ return x>=1&&x<=n&&y>=1&&y<=m; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> v[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dist[i][j]=maxn*maxn; dist[1][1]=1; deque<pair<int,int>>dq; dq.push_front({1,1}); int resp=1; while(dq.size()){ pair<int,int> p=dq.front(); dq.pop_front(); int x=p.first, y=p.second; resp=max(resp,dist[x][y]); for(int i=0;i<4;i++){ int nx=x+dx[i], ny=y+dy[i]; int at=0; if(in(nx,ny)&&v[nx][ny]!='.'){ if(v[x][y]!=v[nx][ny]) at++; if(dist[x][y]+at<dist[nx][ny]){ if(at) dq.push_back({nx,ny}); else dq.push_front({nx,ny}); dist[nx][ny]=dist[x][y]+at; } } } } cout << resp << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...