Submission #895600

#TimeUsernameProblemLanguageResultExecution timeMemory
895600dpsaveslivesTracks in the Snow (BOI13_tracks)C++17
100 / 100
506 ms121952 KiB
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int MAXN = 4010;
char grid[MAXN][MAXN];
int dist[MAXN][MAXN];
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int H,W; cin >> H >> W;
    for(int i = 1;i<=H;++i){
        for(int j = 1;j<=W;++j){
            cin >> grid[i][j];
        }
    }
    int ans = 0;
    int dx[4] = {0,0,1,-1}, dy[4] = {1,-1,0,0};
    dist[1][1] = 1;
    deque<pair<int,int>> q; q.push_back({1,1});
    while(!q.empty()){
        int r = q.front().f, c = q.front().s; q.pop_front();
        ans = max(ans,dist[r][c]);
        //cout << r << " " << c << " " << dist[r][c] << "\n";
        for(int i = 0;i<4;++i){
            int nr = r+dx[i], nc = c+dy[i];
            if(nr < 1 || nc < 1 || nr > H || nc > W) continue;
            if(dist[nr][nc] == 0){
                if(grid[nr][nc] == '.') continue;
                if(grid[r][c] != grid[nr][nc]){
                    q.push_back({nr,nc});
                    dist[nr][nc] = dist[r][c]+1;
                }
                else{
                    q.push_front({nr,nc});
                    dist[nr][nc] = dist[r][c];
                }
            }
        }
    }
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...