제출 #1193724

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

using pii = pair<int, int>;

#define X               first
#define Y               second

const int MXN = 4001;

int n, m;
char a[MXN][MXN];
int dis[MXN][MXN];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> m;
    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
            cin >> a[i][j],
            dis[i][j] = -1;
    deque<pii> dq;
    dq.push_back({0, 0});
    dis[0][0] = 1;
    while(!dq.empty()) {
        auto [x, y] = dq.front();
        dq.pop_front();
        for(int d=0, xx, yy; d<4; d++) {
            xx = x + dx[d], yy = y + dy[d];
            if(xx<0 || xx>=n || yy<0 || yy>=m || a[xx][yy]=='.' || dis[xx][yy]!=-1) continue;
            if(a[x][y]==a[xx][yy]) {
                dis[xx][yy] = dis[x][y];
                dq.push_front({xx, yy});
            }
            else {
                dis[xx][yy] = dis[x][y]+1;
                dq.push_back({xx, yy});
            }
        }
    }
    int ans=0;
    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
            if(a[i][j]!='.')
                ans = max(ans, dis[i][j]);
    cout << ans << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...