| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1303351 | SzymonKrzywda | Tracks in the Snow (BOI13_tracks) | Pypy 3 | 0 ms | 0 KiB |
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 4000 + 7;
char tab[MAXN][MAXN];
int ans[MAXN][MAXN];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, 1, -1};
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> tab[i][j];
ans[i][j] = 1e9;
}
}
deque<pair<int, int>> kolejka;
ans[0][0] = 1;
kolejka.push_back({0, 0});
while (!kolejka.empty()) {
int x = kolejka.front().first;
int y = kolejka.front().second;
kolejka.pop_front();
for (int i = 0; i < 4; i++) {
int new_x = x + dx[i];
int new_y = y + dy[i];
if (new_x >= n || new_x < 0 || new_y < 0 || new_y >= m) continue;
if (tab[new_x][new_y] == '.') continue;
else if (tab[new_x][new_y] != tab[x][y] && ans[new_x][new_y] > ans[x][y] + 1) {
ans[new_x][new_y] = ans[x][y] + 1;
kolejka.push_back({new_x, new_y});
}
else if( tab[new_x][new_y] == tab[x][y] && ans[new_x][new_y] > ans[x][y]) {
ans[new_x][new_y] = ans[x][y];
kolejka.push_front({new_x, new_y});
}
}
}
int maxi = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (ans[i][j] != 1e9) maxi = max(maxi, ans[i][j]);
}
}
cout << maxi << '\n';
return 0;
}
