#include <algorithm>
#include <vector>
#include <iostream>
// #include <string>
using namespace std;
int dirx[]={1,-1,0,0};
int diry[]={0,0,1,-1};//right,left,up,down
int m,n,x,y;
char l,w;
vector<vector<char> > a;
vector<vector<int> > vis;
int flood(int i,int j){
j=(j+n)%n;
if(i<0||i>=m) return 0;
if(vis[i][j]) return 0;
vis[i][j]=1;
if (a[i][j]!=l) return 0;
return 1+flood(i+dirx[0],j+diry[0])+flood(i+dirx[1],j+diry[1])+flood(i+dirx[2],j+diry[2])+flood(i+dirx[3],j+diry[3]);
}
int main(){
while(cin>>m>>n){
a.assign(m,vector<char>(n));
vis.assign(m,vector<int>(n));
for(int i=0;i<m;i++){
cin>>ws;
for(int j=0;j<n;j++){
cin>>a[i][j];
l=a[0][0];
if(a[i][j]!=l)
w=a[i][j];
}
}
cin>>x>>y;
if(l!=a[x][y]){
char tmp=l;
l=w;
w=tmp;
}
flood(x,y);
int ans=0,tans;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
tans=flood(i,j);
if(tans>ans)
ans=tans;
}
}
cout<<ans<<endl;
}
}
#include <vector>
#include <iostream>
// #include <string>
using namespace std;
int dirx[]={1,-1,0,0};
int diry[]={0,0,1,-1};//right,left,up,down
int m,n,x,y;
char l,w;
vector<vector<char> > a;
vector<vector<int> > vis;
int flood(int i,int j){
j=(j+n)%n;
if(i<0||i>=m) return 0;
if(vis[i][j]) return 0;
vis[i][j]=1;
if (a[i][j]!=l) return 0;
return 1+flood(i+dirx[0],j+diry[0])+flood(i+dirx[1],j+diry[1])+flood(i+dirx[2],j+diry[2])+flood(i+dirx[3],j+diry[3]);
}
int main(){
while(cin>>m>>n){
a.assign(m,vector<char>(n));
vis.assign(m,vector<int>(n));
for(int i=0;i<m;i++){
cin>>ws;
for(int j=0;j<n;j++){
cin>>a[i][j];
l=a[0][0];
if(a[i][j]!=l)
w=a[i][j];
}
}
cin>>x>>y;
if(l!=a[x][y]){
char tmp=l;
l=w;
w=tmp;
}
flood(x,y);
int ans=0,tans;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
tans=flood(i,j);
if(tans>ans)
ans=tans;
}
}
cout<<ans<<endl;
}
}
Comments
Post a Comment