제출 #1254475

#제출 시각아이디문제언어결과실행 시간메모리
1254475hoa208Tracks in the Snow (BOI13_tracks)C++20
100 / 100
681 ms181980 KiB
#include<algorithm> #include<iostream> #include<cstring> #include<vector> #include<queue> using namespace std; const int N=4005; const int INF=1e9; #define fi first #define se second #define pa pair<int,int> int h,w; char a[N][N]; int was[N][N],d[N][N]; pa mov[]={{1,0},{0,1},{-1,0},{0,-1}}; bool out(int x,int y) { return x>h || y>w || x<=0 || y<=0 || a[x][y]=='.' || was[x][y]==1; } int ans = 0; void bfsX() { memset(d, 0x3f,sizeof d); d[1][1] = 1; deque<pa> q; q.push_front({1, 1}); was[1][1] = 1; while(!q.empty()) { pa u = q.front(); ans = max(ans, d[u.fi][u.se]); q.pop_front(); for(int i = 0; i < 4; i ++) { pa v = {mov[i].fi + u.fi, mov[i].se + u.se}; if(out(v.fi, v.se)) continue; was[v.fi][v.se] = 1; if(a[v.fi][v.se] != a[u.fi][u.se]) q.push_back(v); else q.push_front(v); d[v.fi][v.se] = d[u.fi][u.se] + (a[v.fi][v.se] != a[u.fi][u.se]); } } } int main (void) { ios_base::sync_with_stdio(false); cin.tie(0); cin>>h>>w; for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) cin>>a[i][j]; bfsX(); cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...