#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define vi vector<int>
#define pii pair<int,int>
#define pf push_front
#define ppf pop_front
using namespace std;
int n, m;
vector<vi> grid, d, vst;
bool ok(int x, int y) {
if(x<0 or x>=n or y<0 or y>=m) return true;
if(!grid[x][y] or vst[x][y]) return true;
vst[x][y]=1;
return false;
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
grid.resize(n,vi(m));
for(int i=0; i<n; ++i) {
string s;
cin >> s;
for(int j=0; j<m; ++j) {
char c=s[j];
if(c=='.') grid[i][j]=0;
else if(c=='F') grid[i][j]=1;
else grid[i][j]=2;
}
}
vector<pii> p={{-1,0},{1,0},{0,-1},{0,1}};
d.resize(n,vi(m));
d[0][0]=1;
deque<pii> prox;
prox.pf({0,0});
vst.resize(n,vi(m));
vst[0][0]=1;
int ans=1;
while(!prox.empty()) {
auto[x,y] = prox.front();
prox.ppf();
for(auto[dx,dy] : p) {
if(ok(x+dx,y+dy)) continue;
if(grid[x+dx][y+dy]==grid[x][y]) {
prox.pf({x+dx,y+dy});
d[x+dx][y+dy] = d[x][y];
} else {
prox.pb({x+dx,y+dy});
d[x+dx][y+dy] = d[x][y]+1;
}
ans=max(ans,d[x+dx][y+dy]);
}
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |