#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a) for(int i = 0; i < (int) a; i++)
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define F first
#define S second
#define sz(x) (int)(x).size()
#define endl '\n'
#define int long long
#define mk_p make_pair
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//int const MAXN = 2e5 + 7;
int const MAX = 500010;
int const INF = 0x3f3f3f3f;
ll const LINF = 0x3f3f3f3f3f3f3f3f;
int const MAXN = 200010;
const int MOD = 1e9 + 7;
const int modz = 998244353;
const int MAXCOORD = 32010;
const int OFF = 1000020;
char grid[4005][4005];
int dist[4005][4005];
vector<pair<int,int>> mov = {{1,0}, {0,1}, {-1,0}, {0,-1}};
int n, m;
//check constraints
bool val(pair<int,int> u){
return u.F >= 0 and u.S >= 0 and u.F < n and u.S < m
and grid[u.F][u.S] != '.';
}
int bfs(pair<int,int> s){
memset(dist, 0x3f, sizeof dist);
dist[s.F][s.S] = 1;
deque<pair<int,int>> dq;
dq.pb(s);
int ans = 0;
while(!dq.empty()){
pair<int,int> v = dq.front(); dq.pop_front();
for(auto u : mov){
u.F += v.F, u.S += v.S;
if(val(u)){
if(grid[v.F][v.S] == grid[u.F][u.S]){
if(dist[v.F][v.S] < dist[u.F][u.S]){
dist[u.F][u.S] = dist[v.F][v.S];
dq.push_front(u);
}
}
else{
if(dist[v.F][v.S] + 1 < dist[u.F][u.S]){
dist[u.F][u.S] = dist[v.F][v.S] + 1;
dq.push_back(u);
}
}
ans = max(ans, dist[u.F][u.S]);
}
}
}
return ans;
}
void solve(){
cin >> n >> m;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> grid[i][j];
}
}
pii start = {0,0};
cout << bfs(start) << endl;
}
int32_t main() {
ios::sync_with_stdio(false); cin.tie(0);
int te = 1;// cin >> te;
while(te--){
solve();
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |