#include<bits/stdc++.h>
using namespace std;
const int maxn=4010;
char v[maxn][maxn];
int dist[maxn][maxn], dx[]={1,-1,0,0}, dy[]={0,0,1,-1}, n, m;
bool in(int x, int y){
return x>=1&&x<=n&&y>=1&&y<=m;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> n >> m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin >> v[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) dist[i][j]=maxn*maxn;
dist[1][1]=1;
deque<pair<int,int>>dq; dq.push_front({1,1});
int resp=1;
while(dq.size()){
pair<int,int> p=dq.front(); dq.pop_front();
int x=p.first, y=p.second;
resp=max(resp,dist[x][y]);
for(int i=0;i<4;i++){
int nx=x+dx[i], ny=y+dy[i];
int at=0;
if(in(nx,ny)&&v[nx][ny]!='.'){
if(v[x][y]!=v[nx][ny]) at++;
if(dist[x][y]+at<dist[nx][ny]){
if(at) dq.push_back({nx,ny});
else dq.push_front({nx,ny});
dist[nx][ny]=dist[x][y]+at;
}
}
}
}
cout << resp << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |