Submission #1295977

#TimeUsernameProblemLanguageResultExecution timeMemory
1295977linussTracks in the Snow (BOI13_tracks)C++20
100 / 100
758 ms120184 KiB
#include <bits/stdc++.h>
using namespace std;


int main(){
    int n, m;
    cin >> n >> m;

    vector<string> grid(n);
    int dx[4] = {1, -1, 0, 0};
    int dy[4] = {0, 0, 1, -1};

    for (int i = 0; i<n; i++){
        cin >> grid[i];
    }
    vector<vector<int>> dist(n, vector<int>(m, INT_MAX));
    dist[0][0]=0;
    deque<pair<int, int>> dq;

    dq.push_front({0, 0});

    while (!dq.empty()){
        auto [x, y] = dq.front();
        dq.pop_front();
        for (int k = 0; k<4; k++){
            int nx = x + dx[k];
            int ny = y + dy[k];

            if (nx<0 || ny<0 || nx>=n || ny >=m || grid[nx][ny]=='.') continue;
            int w = (grid[x][y]!=grid[nx][ny]);
            if (dist[x][y] + w < dist[nx][ny]){
                dist[nx][ny] = dist[x][y] + w;
                if (!w){
                    dq.push_front({nx, ny});
                }
                else dq.push_back({nx, ny});
            }
        }
    }
    int ma = 0;
    for (auto i : dist){
        for (auto j : i){
            if (j!=INT_MAX) ma = max(ma, j);
        }
    }
    cout << ma+1 << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...