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...