제출 #1336490

#제출 시각아이디문제언어결과실행 시간메모리
1336490danielwu11Tracks in the Snow (BOI13_tracks)C++20
100 / 100
630 ms160604 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;
    vector<vector<int>> grid(N, vector<int>(M));
    for(int i=0; i<N; i++){
        string s;
        cin >> s;
        for(int j=0; j<M; j++){
            if(s[j]=='.'){
                grid[i][j]=0;
            }
            if(s[j]=='R'){
                grid[i][j]=1;
            }
            if(s[j]=='F'){
                grid[i][j]=2;
            }
            // cout << grid[i][j] << " ";
        }
        // cout << endl;
    }
    // rabbit is 1, fox is 2
    int xadj[]={1, 0, -1, 0};
    int yadj[]={0, 1, 0, -1};
    vector<vector<int>> visited(N, vector<int>(M, -1));
    deque<pair<int, int>> dq;
    dq.push_front({0, 0});
    visited[0][0]=0;
    int ans=0;
    while(!dq.empty()){
        int x=dq.front().first;
        int y=dq.front().second;
        dq.pop_front();
        for(int k=0; k<4; k++){
            int newx=x+xadj[k];
            int newy=y+yadj[k];
            if((newx<0 || newx>=N || newy<0 || newy>=M)||visited[newx][newy]!=-1||grid[newx][newy]==0){
                continue;
            }
            if(grid[x][y]==grid[newx][newy]){
                visited[newx][newy]=visited[x][y];
                dq.push_front({newx, newy});
            }else{
                visited[newx][newy]=visited[x][y]+1;
                ans=max(ans, visited[newx][newy]);
                dq.push_back({newx, newy});
            }
        }
    }
    cout << ans+1 << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...