Submission #812533

#TimeUsernameProblemLanguageResultExecution timeMemory
812533andecaandeciTracks in the Snow (BOI13_tracks)C++17
100 / 100
1441 ms888112 KiB
#include <bits/stdc++.h>
#define int long long
#define SETIO cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false);
#define REP(i,a,b)for(int i=a;i<b;i++)
#define fi first
#define se second
#define pb push_back
#define FORI(v)for(auto i:v)
#define FORJ(v)for(auto j:v)
using namespace std;
using pii=pair<int, int>;

int color[5000][5000];
bool visited[5000][5000];
int w, h;

int bfs(){
    deque<pair<pii, int>> q;
    q.pb({{0,0},1});
    int ans=1;
    while(q.size()){
        auto qt = q.front();q.pop_front();
        auto top = qt.fi;
        if(top.fi<0)continue;
        if(top.fi>=h)continue;
        if(top.se<0)continue;
        if(top.se>=w)continue;
        if(visited[top.fi][top.se])continue;
        visited[top.fi][top.se]=true;
        int cur=color[top.fi][top.se];
        if(cur==0)continue;
        #define PUSH(x, y) if(cur!=color[x][y])q.pb({{x,y},qt.se+1});else q.push_front({{x,y},qt.se});
        PUSH(top.fi+1,top.se);
        PUSH(top.fi-1,top.se);
        PUSH(top.fi,top.se+1);
        PUSH(top.fi,top.se-1);
        ans=max(ans,qt.se);
    }
    return ans;
}

#undef int
int main() {
#define int long long
    SETIO;
    cin>>h>>w;
    REP(i,0,h){
        REP(j,0,w){
            char c;cin>>c;
            if(c=='.')color[i][j]=0;
            if(c=='R')color[i][j]=1;
            if(c=='F')color[i][j]=2;
        }
    }
    memset(visited,0,sizeof visited);
    cout<<bfs()<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...