Submission #707951

#TimeUsernameProblemLanguageResultExecution timeMemory
707951spensaTracks in the Snow (BOI13_tracks)C++14
100 / 100
1214 ms277680 KiB
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>

int L[] = {0, 0, 1, -1};
int R[] = {1, -1, 0, 0};

const int MXN = 4020;
int arr[MXN][MXN] = {0};
int dist[MXN][MXN] = {0};
int vis[MXN][MXN] = {0};
int h, w;

bool check(int a, int b){
    if(a<1 || b<1 || a>h || b>w) return false;
    else return true;
}

int main(){
    //faster io
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin>>h>>w;
    string str;
    char c;
    int a, b, n1, n2, mx;


    for(int i=1; i<=h; i++){
        cin>>str;
        for(int j=1; j<=w; j++){
            c = str[j-1];
            if(c=='.') arr[i][j] = 0;
            else if(c=='R') arr[i][j] = 1;
            else arr[i][j] = 2;
        }
    }

    deque<pii> q;
    q.push_back({1,1});
    dist[1][1] = 1;

    while(!q.empty()){
        a = q.front().first;
        b = q.front().second;
        q.pop_front();

        for(int i=0; i<4; i++){
            n1 = a + L[i];
            n2 = b + R[i];
            if(!check(n1, n2)) continue;
            if(arr[n1][n2]==0) continue;
            if(vis[n1][n2]) continue;
            
            if(arr[a][b]==arr[n1][n2]){
                q.push_front({n1,n2});
                dist[n1][n2] = dist[a][b];
            }
            else{
                q.push_back({n1,n2});
                dist[n1][n2] = dist[a][b] + 1;
            }
                
        }

        vis[a][b] = 1;
    }

    mx = 0;

    for(int i=1; i<=h; i++){
        for(int j=1; j<=w; j++){
            // cout<<dist[i][j]<<" ";
            mx = max(mx, dist[i][j]);    
        }
        // cout<<"\n";
    }

    cout<<mx<<"\n";

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...