Pagini recente » Cod sursa (job #3291730) | Cod sursa (job #3237607) | Cod sursa (job #2685134) | Cod sursa (job #2840303) | Cod sursa (job #1310431)
#include <fstream>
#include <cstring>
#define DIM 205
using namespace std;
ifstream fin("bmatrix.in");
ofstream fout("bmatrix.out");
int N,M,a[DIM][DIM],sol,sus[DIM],jos[DIM];
char s[DIM][DIM];
void rotate(){
char b[DIM][DIM];
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
b[M-j+1][i]=s[i][j];
memcpy(s,b,sizeof(b));
swap(N,M);
}
void solve(){
int nr;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++)
if(s[i][j]=='0')
a[i][j]=a[i-1][j]+1;
else
a[i][j]=0;
sus[i]=jos[i]=0;
}
for(int i=1;i<N;i++)
for(int j=i;j<=N;j++){
nr=0;
for(int k=1;k<=M;k++){
if(a[j][k]>=j-i+1)
nr++;
else
nr=0;
sus[j]=max(sus[j],nr*(j-i+1));
jos[i]=max(jos[i],nr*(j-i+1));
}
}
for(int i=2;i<=N;i++)
sus[i]=max(sus[i-1],sus[i]);
for(int i=N-1;i>=1;i--)
jos[i]=max(jos[i+1],jos[i]);
for(int i=1;i<N;i++)
sol=max(sol,sus[i]+jos[i+1]);
}
int main(){
fin>>N>>M;
for(int i=1;i<=N;i++)
fin>>s[i]+1;
solve();
rotate();
solve();
fout<<sol;
fin.close();fout.close();
return 0;
}