This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <queue>
#include <tuple>
using namespace std;
#define INF 0x7f7f7f7f
string stage[4001];
int status[4001][4001];
int dirx[] = {1, -1, 0, 0};
int diry[] = {0, 0, 1, -1};
deque<pair<int, int>> dq;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int h, w;
cin >> h >> w;
int sum = 0;
for(int i = 0; i < h; i++)
{
cin >> stage[i];
for(int j = 0; j < w; j++)
status[i][j] = INF;
}
int ans = 0;
status[0][0] = 1;
dq.push_front({0, 0});
while(!dq.empty())
{
int x, y;
tie(x, y) = dq.front(); dq.pop_front();
for(int i = 0; i < 4; i++)
{
int dx = x + dirx[i];
int dy = y + diry[i];
if(dx < 0 || dx >= h || dy < 0 || dy >= w)
continue;
if(stage[dx][dy] == '.')
continue;
if(stage[dx][dy] == stage[x][y] && status[dx][dy] > status[x][y])
{
status[dx][dy] = status[x][y];
ans = max(ans, status[dx][dy]);
dq.push_front({dx, dy});
}
else if(stage[dx][dy] != stage[x][y] && status[dx][dy] > status[x][y]+1)
{
status[dx][dy] = status[x][y]+1;
ans = max(ans, status[dx][dy]);
dq.push_back({dx, dy});
}
}
}
cout << ans << '\n';
}
Compilation message (stderr)
tracks.cpp: In function 'int main()':
tracks.cpp:23:6: warning: unused variable 'sum' [-Wunused-variable]
23 | int sum = 0;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |