Submission #1299016

#TimeUsernameProblemLanguageResultExecution timeMemory
1299016random_nameTracks in the Snow (BOI13_tracks)C++20
33.96 / 100
589 ms110788 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int h,w;cin>>h>>w;

    vector<vector<char>> snow(h, vector<char>(w));
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            cin>>snow[i][j];
        }
    }

    
    vector<vector<int>> swaps(h, vector<int>(w, -1));
    
    stack<pair<int, int>> diff;
    stack<pair<int, int>> same;
    same.push({0, 0});
    swaps[0][0] = 1;

    pair<int, int> GOES[] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

    while(!same.empty() || !diff.empty()){
        pair<int, int> c;
        if(same.empty()){
            c = diff.top();
            diff.pop();
        }

        else{
            c = same.top();
            same.pop();
        }

        for(pair<int, int> go:GOES){
            int x=c.first+go.first, y=c.second+go.second;

            if(x < 0 || x >= h || y < 0 || y >= w)
                continue;

            if(snow[x][y] == '.' || swaps[x][y] != -1)
                continue;

            
            if(snow[x][y] == snow[c.first][c.second]){
                same.push({x, y});
                swaps[x][y] = swaps[c.first][c.second];
            }
            
            else{
                diff.push({x, y});
                swaps[x][y] = swaps[c.first][c.second]+1;
            }
        }
    }

    int mx=0;
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            mx = max(mx, swaps[i][j]);
        }
    }

    cout << mx << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...