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 <bits/stdc++.h>
using namespace std;
#define OPTM ios_base::sync_with_stdio(0); cin.tie(0);
#define INF int(1e9+7)
#define ln '\n'
#define ll long long
#define ull unsigned long long
#define ui unsigned int
#define us unsigned short
#define FOR(i,s,n) for (int i = s; i < n; i++)
#define FORR(i,n,s) for (int i = n; i > s; i--)
#define FORX(u, arr) for (auto u : arr)
#define PB push_back
#define in(v,x) (v.find(x) != v.end())
#define F first
#define S second
#define PII pair<int, int>
#define UM unordered_map
#define US unordered_set
#define PQ priority_queue
#define ALL(v) v.begin(), v.end()
const ll LLINF = 1e18+1;
const int dx[] = {0,0,1,-1};
const int dy[] = {1,-1,0,0};
const int MAXN = 4e3+1;
int h,w;
string g[MAXN];
bool z[MAXN][MAXN];
int d[MAXN][MAXN];
int main() {
OPTM;
cin >> h >> w;
FOR(i,0,h) cin >> g[i];
FOR(i,0,h) FOR(j,0,w) d[i][j] = INF;
d[0][0] = 1;
deque<PII> q;
q.PB({0,0});
while (!q.empty()) {
int x = q.front().F, y = q.front().S;
q.pop_front();
if (z[y][x]) continue;
z[y][x] = 1;
FOR(i,0,4) {
int nx = x+dx[i], ny = y+dy[i];
if (nx < 0 || nx >= w || ny < 0 || ny >= h) continue;
if (g[ny][nx] == '.') continue;
int c = 0;
if (g[ny][nx] != g[y][x]) c = 1;
if (d[y][x]+c < d[ny][nx]) {
d[ny][nx] = d[y][x]+c;
if (c == 1) q.PB({nx,ny});
else q.push_front({nx,ny});
}
}
}
int res = 0;
FOR(i,0,h) {
FOR(j,0,w) {
if (g[i][j] != '.') res = max(res, d[i][j]);
}
}
cout << res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |