Submission #1290756

#TimeUsernameProblemLanguageResultExecution timeMemory
1290756iemanuelTracks in the Snow (BOI13_tracks)C++20
100 / 100
1177 ms173724 KiB
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int,int>

const int nmax=4e3+2;
int mat[nmax][nmax];
bool visited[nmax][nmax];
int dist[nmax][nmax];
int n,m;

int di[]={-1,1,0,0};
int dj[]={0,0,-1,1};

bool inmat(int i,int j){
    return 1<=i&&i<=n&&1<=j&&j<=m;

}

void bfs1_0(int is,int js){
    deque<pii>q;
    q.push_front({is,js});
    visited[is][js]=1;
    dist[is][js]=1;
    while(!q.empty()){
        pii current=q.front();
        q.pop_front();

        for(int k=0;k<4;k++){
            int in=current.first+di[k];
            int jn=current.second+dj[k];
            if(inmat(in,jn)&&!visited[in][jn]&&mat[in][jn]){
                visited[in][jn]=1;

                if(mat[current.first][current.second]==mat[in][jn]){
                    q.push_front({in,jn});
                    dist[in][jn]=dist[current.first][current.second];
                }
                else{
                    q.push_back({in,jn});
                    dist[in][jn]=dist[current.first][current.second]+1;
                }
            }
        }
    }

}

void read(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            char a;
            cin>>a;
            if(a=='.')mat[i][j]=0;
            if(a=='F')mat[i][j]=1;
            if(a=='R')mat[i][j]=2;
        }
    }



}


int main(){
    read();
    bfs1_0(1,1);
    int sol=-1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            sol=max(sol,dist[i][j]);
    }
    cout<<sol;


}








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