Submission #1297427

#TimeUsernameProblemLanguageResultExecution timeMemory
1297427baotoan655Tracks in the Snow (BOI13_tracks)C++20
100 / 100
511 ms43956 KiB
#include <bits/stdc++.h>
#define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
using namespace std;

const int N = 4005;
const int dx[] = {0, 0, -1, 1};
const int dy[] = {-1, 1, 0, 0};

int r, c;
string a[N];
bool vis[N][N];
int ans;
void bfs(queue<pair<int, int>> &q1, queue<pair<int, int>> &q2) {
    if(q1.empty()) return;
    ++ans;
    while(!q1.empty()) {
        int x = q1.front().first, y = q1.front().second;
        q1.pop();
        for(int _ = 0; _ < 4; ++_) {
            int nx = x + dx[_];
            int ny = y + dy[_];
            if(nx < 0 || nx >= r || ny < 0 || ny >= c || a[nx][ny] == '.' || vis[nx][ny]) continue;
            vis[nx][ny] = true;
            if (a[nx][ny] != a[x][y]) q2.push(make_pair(nx, ny));
            else q1.push(make_pair(nx, ny));
        }
    }
    bfs(q2, q1);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

//    file("A") else file("task");

    cin >> r >> c;
    for(int i = 0; i < r; ++i) {
        cin >> a[i];
    }
    queue<pair<int, int>> q1, q2;
    q1.push(make_pair(0, 0));
    vis[0][0] = true;
    bfs(q1, q2);
    cout << ans << '\n';
    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...