Pagini recente » Cod sursa (job #2436697) | Cod sursa (job #2399281) | Cod sursa (job #3247663) | Cod sursa (job #584626) | Cod sursa (job #58063)
Cod sursa(job #58063)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "bmatrix.in"
#define out "bmatrix.out"
#define dim 201
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);
FILE *fin = fopen(in,"r");
int ariemax=0;
int tmax=0;
//fin >> n >> m;
fscanf(fin,"%d%d", &n, &m);
fscanf(fin,"\n");
char lin[211];
for ( int i = 1; i <= n; i++ )
{
fgets(lin,210,fin);
int j = 0;
while ( j < m )
{
a[i][j+1] = (int)lin[j] - 48;
coloana[i][j+1] = coloana[i-1][j+1] + a[i][j+1];
linie[i][j+1] = linie[i][j] + a[i][j+1];
j++;
}
}
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 < d; 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;
}