Pagini recente » Cod sursa (job #435455) | Cod sursa (job #338347) | Cod sursa (job #53963) | Cod sursa (job #393910) | Cod sursa (job #3328883)
#include <fstream>
#define N 1240
using namespace std;
ifstream gg("ternar2.in");
ofstream wp("ternar2.out");
short int a[N][N],l[N][N],c[N][N], n,m;
short cs, cd, ls, ld;
int s;
short dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void citire(){
gg>>n>>m;
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
{
gg>>a[i][j];
if(a[i][j]==1){
l[i][j]=b[i][j-1]+1; /// lungimea pe linii
c[i][j]=c[i-1][j]+1; /// latimea pe coloane
}
else l[i][j]=c[i][j]=0;
}
}
void fill(short int i, short int j){
short int x,y,p;
pair<short, short> st;
st.push({i,j});
a[i][j]=0;
s=1;
ls=ld=i;
cs=cd=j;
while(!st.empty()){
i=st.top().first;
j=st.top().second
st.pop();
for(int dir=0; dir<4; ++dir){
x=i+dx[i];
y=j+dy[j]
if(a[x][y]==2){
xs=min(xs,x);
xd=max(xd,x);
ys=min(ys,y);
yd=max(yd,y);
s++;
a[i][j]=0;
st.push({x,y});
}
}
}
}
void finish(){
short i,j,sl,sc;
int ariemax=0;
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
if(a[i][j]==2){
fill(i,j);
sl=xd-xs+1;
sc=yd-ys+1;
if(s==sc*sl){
if (l[xd+1][yd+1] >= sc + 2 && c[xd+1][yd+1] >= sl + 2 && l[xs-1][yd+1] >= sc + 2 && c[xd+1][ys-1] >= sl + 2)
ariemax = max(ariemax, (int)(sc + 2)*(sl + 2));
}
}
wp<<ariemax;
}
int main(){
citire();
finish();
return 0;
}