Pagini recente » Cod sursa (job #300071) | Cod sursa (job #1092736) | Cod sursa (job #1722638) | Cod sursa (job #30198) | Cod sursa (job #23032)
Cod sursa(job #23032)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "bmatrix.in"
#define out "bmatrix.out"
#define dim 301
int a[dim][dim];
int coloana[dim][dim], linie[dim][dim];
int n, m;
int Doit(int,int);
int Doit2(int,int);
int Doit3(int,int);
int Doit4(int,int);
int main()
{
freopen(out,"w",stdout);
int ariemax=0;
int tmax=0;
FILE *f = fopen(in,"r");
char c[dim];
fscanf(f,"%d %d\n",&n,&m);
for ( int i = 1; i <= n; i++ )
{
fgets(c,dim,f);
for ( int j = 1; j <= m; j++ )
{
a[i][j]=(int)c[j-1] - 48;
coloana[i][j] = coloana[i-1][j] + a[i][j];
linie[i][j] = linie[i][j-1] + a [i][j];
}
fscanf(f,"\n");
}
for ( int j = 1; j <= n; j++ )
{
int val = Doit(1,j) + Doit(j+1,n);
if ( ariemax < val ) ariemax = val;
}
for ( int j = 1; j <= m; j++ )
{
int val = Doit2(1,j) + Doit2(j+1,m);
if ( ariemax < val ) ariemax = val;
}
printf("%d", ariemax);
}
int Doit(int s, int d)
{
int tmax = 0;
int ariem = 1;
for ( int i = s; i < n; i++ )
{
for ( int j = i+1; j <= d; j++ )
{
int t = 0;
tmax = 0;
for ( int k = 1; k <= m; k++ )
{
int ok = 1;
if ( coloana[j][k] - coloana[i-1][k] != 0 ) ok = 0;
if ( ok == 1 ) t += 1;
else
{
if ( tmax < t ) tmax = t;
t = 0;
}
}
if ( tmax < t ) tmax = t;
if ( ariem < (j-i+1)*tmax ) ariem = (j-i+1)*tmax;
}
}
return ariem;
}
int Doit2(int s, int d)
{
int tmax = 0;
int ariem = 0;
for ( int i = s; i < d; i++ )
{
for ( int j = i+1; j <= d; j++ )
{
int t = 0;
tmax = 0;
for ( int k = 1; k <= n; k++ )
{
int ok = 1;
if ( linie[k][j] - linie[k][i-1] != 0 ) ok = 0;
if ( ok == 1 ) t += 1;
else
{
if ( tmax < t ) tmax = t;
t = 0;
}
}
if ( tmax < t ) tmax = t;
if ( ariem < (j-i+1)*tmax ) ariem = (j-i+1)*tmax;
}
}
return ariem;
}