#include <bits/stdc++.h>
#define f first
#define s second
int main()
{
int h, w;
std::cin >> h >> w;
std::vector<std::vector<char>> a(h, std::vector<char>(w));
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
std::cin >> a[i][j];
std::deque<std::pair<std::pair<int,int>, int>> dq;
std::vector<std::vector<int>> dist(h, std::vector<int>(w, -1));
dq.push_front({{0,0},1});
dq.push_front({{0,0},1});
int res = 0;
while (!dq.empty())
{
auto curr = dq.front(); dq.pop_front();
// lepszy juz zostal ustawiony
if (dist[curr.f.f][curr.f.s] != -1)
continue;
dist[curr.f.f][curr.f.s] = curr.s;
res = std::max(res, curr.s);
const std::pair<int, int> dirs[4] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (auto dir : dirs)
{
int x = curr.f.f + dir.f;
int y = curr.f.s + dir.s;
if (x >= 0 & y >= 0 && x < h && y < w)
{
if (dist[x][y] != -1)
continue;
if (a[x][y] == '.')
continue;
if (a[curr.f.f][curr.f.s] != a[x][y])
dq.push_back({{x,y}, dist[curr.f.f][curr.f.s]+1});
else
dq.push_front({{x, y}, dist[curr.f.f][curr.f.s]});
}
}
}
std::cout << res << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |