제출 #101518

#제출 시각아이디문제언어결과실행 시간메모리
101518lycTracks in the Snow (BOI13_tracks)C++14
100 / 100
1338 ms44080 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> ii;
#define fi first
#define sc second
#define SZ(x) (int)(x).size()
#define ALL(x) (x).begin(), (x).end()

int main() {
    //freopen("in.txt", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int h, w; cin >> h >> w;
    string g[h];
    for (int i = 0; i < h; ++i) {
        cin >> g[i];
    }

    int dy[] = {-1, 0, 1, 0};
    int dx[] = {0, 1, 0, -1};
    bool vis[h][w]; memset(vis, 0, sizeof vis);
    int ans = 0;
    queue<ii> q[2];
    q[0].push(ii(0, 0));
    vis[0][0] = 1;
    while ((!q[0].empty()) || (!q[1].empty())) {
        for (int x = 0; x < 2; ++x) {
            if (!q[x].empty()) ++ans;
            while (!q[x].empty()) {
                ii u = q[x].front(); q[x].pop();
                for (int i = 0; i < 4; ++i) {
                    ii v = ii(u.fi + dy[i], u.sc + dx[i]);
                    if (v.fi >= 0 && v.fi < h && v.sc >= 0 && v.sc < w && g[v.fi][v.sc] != '.' && !vis[v.fi][v.sc]) {
                        if (g[v.fi][v.sc] == g[u.fi][u.sc]) {
                            q[x].push(v);
                        }
                        else {
                            q[!x].push(v);
                        }
                        vis[v.fi][v.sc] = 1;
                    }
                }
            }
        }
    }
    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...