Submission #1299514

#TimeUsernameProblemLanguageResultExecution timeMemory
1299514zhenTracks in the Snow (BOI13_tracks)C++20
100 / 100
1028 ms302760 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

vector<ll> dx = {0, 1, 0, -1};
vector<ll> dy = {1, 0, -1, 0};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    // freopen("template.in", "r", stdin);
    // freopen("template.out", "w", stdout);
    
    ll n, m; cin >> n >> m; vector<vector<ll>> snow(n + 2, vector<ll>(m + 2, -1));
    for (ll i = 1; i <= n; ++i){
        for (ll j = 1; j <= m; ++j){
            char x; cin >> x;
            if (x == 'F'){
                snow[i][j] = 1;
            }
            else if (x == 'R'){
                snow[i][j] = 0;
            }
        }
    }

    vector<vector<ll>> d(n + 2, vector<ll>(m + 2, INT_MAX)); d[1][1] = 1;
    deque<pair<ll, ll>> dq; dq.push_back({1, 1});
    ll maxd = 1;
    while (!dq.empty()){
        auto p = dq.front();
        dq.pop_front();
        for (ll i = 0; i < 4; ++i){
            pair<ll, ll> q = {p.first + dx[i], p.second + dy[i]};
            if (snow[q.first][q.second] == -1){continue;}
            if (snow[q.first][q.second] == snow[p.first][p.second]){
                if (d[p.first][p.second] < d[q.first][q.second]){
                    d[q.first][q.second] = d[p.first][p.second];
                    dq.push_front(q);
                }
            } 
            else {
                if (d[p.first][p.second] + 1 < d[q.first][q.second]){
                    d[q.first][q.second] = d[p.first][p.second] + 1;
                    dq.push_back(q); maxd = max(maxd, d[q.first][q.second]);
                }
            }
        }
    }
    cout << maxd;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...