Submission #1266812

#TimeUsernameProblemLanguageResultExecution timeMemory
1266812avohadoTracks in the Snow (BOI13_tracks)C++20
100 / 100
928 ms135384 KiB
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
int x[4]={-1, 1, 0, 0}, y[4]={0, 0, -1, 1};
void solve(){
    int w, h;
    cin >> h >> w;
    char c[h+2][w+2], mch;
    bool used[h+2][w+2];
    for(int i=0; i<h+2; i++){
        for(int j=0; j<w+2; j++){
            c[i][j]='.';
            used[i][j]=0;
        }
    }
    for(int i=1; i<=h; i++){
        for(int j=1; j<=w; j++){
            cin >> c[i][j];
        }
    }
    mch=c[1][1];
    used[1][1]=1;
    queue<pair<int, int>> q1, q2;
    q1.push({1, 1});
    int sh=0;
    while(q1.size()||q2.size()){
        while(q2.size()){
            int i=q2.front().f, j=q2.front().s;q2.pop();
            for(int l=0; l<4; l++){
                if(!used[i+x[l]][j+y[l]]&&c[i+x[l]][j+y[l]]==mch){
                    used[i+x[l]][j+y[l]]=1;
                    q1.push({i+x[l],j+y[l]});
                }
            }
        }
        while(q1.size()){
            int i=q1.front().f, j=q1.front().s;q1.pop();
            for(int l=0; l<4; l++){
                if(!used[i+x[l]][j+y[l]]&&c[i+x[l]][j+y[l]]==mch){
                    used[i+x[l]][j+y[l]]=1;
                    q1.push({i+x[l],j+y[l]});
                }
            }
            q2.push({i, j});
        }
        mch=(mch=='R'?'F':'R');
        sh++;
    }
    cout << sh-1;
}
int main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int t=1;
    //cin >> t;
    while(t--){
        solve();
        cout << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...