Submission #1313552

#TimeUsernameProblemLanguageResultExecution timeMemory
1313552shirokitoTracks in the Snow (BOI13_tracks)C++20
47.50 / 100
2134 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

#define ForUp(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define ForDn(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
#define all(a) (a).begin(), (a).end()

using ll = long long;

const int N = 4000 + 24;
const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};

int n, m; char a[N][N]; bool vis[N][N];
int cnt_visit;

bool inside(int i, int j) {
    return (i >= 1 && i <= n && j >= 1 && j <= m);
}

void dfs(char c, int u, int v) {
    a[u][v] = (a[u][v] == 'F' ? 'R' : 'F');
    cnt_visit++; vis[u][v] = 1;

    ForUp (_, 0, 3) {
        int i = u + dx[_], j = v + dy[_];
        if (!vis[i][j] && inside(i, j) && a[i][j] == c) {
            dfs(c, i, j);
        }   
    }
}

void solve() {
    cin >> n >> m;
    int cnt_all = 0;

    ForUp (i, 1, n) ForUp (j, 1, m) {
        cin >> a[i][j];
        cnt_all += (a[i][j] != '.');
    }

    int res = 0;

    while (true) {
        ForUp (i, 1, n) ForUp (j, 1, m) vis[i][j] = 0;

        cnt_visit = 0; dfs(a[1][1], 1, 1);
        res++;
        
        if (cnt_visit == cnt_all) break;
    }

    cout << res << '\n';
}

signed main() {
    cin.tie(0) -> sync_with_stdio(0);

    int T = 1; // cin >> T;
    while (T--) {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...