Submission #1295737

#TimeUsernameProblemLanguageResultExecution timeMemory
1295737haithamcoderTracks in the Snow (BOI13_tracks)C++20
100 / 100
781 ms210276 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll, ll> pll;

const ll LOG = 31;
const ll MOD = 1000000007;
const ll inf = 1e17;
const ll B = 2305843009213693951;


#define db(x) cerr << #x << " = " << x << " | "
#define dbg(x) cerr << #x << " = " << x << "\n"

#define Algerian ios::sync_with_stdio(0);
#define OI cin.tie(NULL);


int main() {
    Algerian OI

    ll n, m;
    cin >> n >> m;

    vector<string> grid(n);

    for (ll i = 0; i < n; i++) {
        cin >> grid[i];
    }

    deque<pll> dq;
    dq.push_back({0, 0});
    vector<vector<ll>> dist(n, vector<ll>(m, -1));
    dist[0][0] = 1;

    ll res = 1;

    while (dq.size()) {
        auto [x, y] = dq.front();
        dq.pop_front();
        // if (dist[x][y] > res) { db(x); dbg(y); }
        res = max(res, dist[x][y]);

        vector<pll> adj = {{x - 1, y}, {x + 1, y}, {x, y - 1}, {x, y + 1}};

        for (auto [cx, cy] : adj) {
            if (cx < 0 || cx >= n || cy < 0 || cy >= m) continue;
            if (dist[cx][cy] != -1 || grid[cx][cy] == '.') continue;

            if (grid[cx][cy] == grid[x][y]) {
                dist[cx][cy] = dist[x][y];
                dq.push_front({cx, cy});
            } else {
                dist[cx][cy] = dist[x][y] + 1;
                dq.push_back({cx, cy});
            }
        }
    }

    cout << res << "\n";

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