Submission #1295244

#TimeUsernameProblemLanguageResultExecution timeMemory
1295244al95ireyizTracks in the Snow (BOI13_tracks)C++20
100 / 100
994 ms227696 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vll vector<ll>
#define len(x) (ll)x.size()
const ll INF = 1e9, INFL = 1e18;
const ll MOD = 1e9 + 7;
const ll maxn = 5000 + 5;
 
ll n, m, k = 0;

char a[maxn][maxn];
ll dis[maxn][maxn];
void _() {
    cin >> n >> m;
    for(ll i = 1; i <= n; i ++){
        for(ll j = 1; j <= m; j ++){
            cin >> a[i][j];
            dis[i][j] = INF;
        }
    }
    deque<pair<ll, ll>>d;
    d.push_back({1, 1});
    dis[1][1] = 1;
    while(!d.empty()){
        auto [x, y] = d.front();
        d.pop_front();
        for(auto [i, j] : vector<pair<ll, ll>>{{x - 1, y}, {x, y - 1}, {x + 1, y}, {x, y + 1}}){
            if(i <= 0 or j <= 0 or i > n or j > m) continue;
            if(a[i][j] == '.') continue;
            if(dis[i][j] > dis[x][y] + (a[x][y] != a[i][j])){
                dis[i][j] = dis[x][y] + (a[x][y] != a[i][j]);
                if(a[x][y] != a[i][j]) d.push_back({i, j});
                else d.push_front({i, j});
            }
        }
    }
    ll cv = 0;
    for(ll i = 1; i <= n; i ++){
        for(ll j = 1; j <= m; j ++){
            if(dis[i][j] == INF) continue;
            cv = max(cv, dis[i][j]);
        }
    }
    cout << cv << '\n';
}
signed main() {
    cin.tie(0)->sync_with_stdio(0);
    ll t = 1;
    // cin >> t;
    while(t --) _();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...