제출 #1356703

#제출 시각아이디문제언어결과실행 시간메모리
1356703vjudge1Tracks in the Snow (BOI13_tracks)C++17
100 / 100
351 ms30536 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define ll long long
#define endl "\n"
#define emb emplace_back
#define io() do{ios::sync_with_stdio(false); cin.tie(nullptr);}while(0)
const ll mod=1e9+9;
const ll infl=1e18;
const int infi=1e9;
const int maxn= 1e6+2e5;

int main(){
    io();
    ll n,m;
    cin >> n >> m;
    vector<string> v(n);
    for(auto &e:v)cin >> e;
    queue<pair<int,int>> q[2];
    bool fg=(v[0][0]=='F');
    q[fg].emplace(0,0);
    vector<vector<bool>> vis(n,vector<bool>(m,0));
    vis[0][0]=1;
    int cnt=0;
    auto check=[&](int y,int x){return y>=0&&x>=0&&y<n&&x<m;};
    pair<int,int> dir[]={{1,0},{0,1},{-1,0},{0,-1}};
    string type="RF";
    while(1){
        if(q[fg].empty())break;
        while(!q[fg].empty()){
            auto [r,c]=q[fg].front();
            q[fg].pop();
            for(auto [my,mx]:dir){
                int nr=my+r,nc=mx+c;
                if(check(nr,nc)&&!vis[nr][nc]&&v[nr][nc]!='.'){
                    vis[nr][nc]=1;
                    if(v[nr][nc]==type[fg]){
                        q[fg].emplace(nr,nc);
                    }else q[!fg].emplace(nr,nc);
                }
            }
        }
        cnt++;
        fg=!fg;
    }

    cout << cnt;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...