Pagini recente » Cod sursa (job #1384991) | Cod sursa (job #2695898) | Cod sursa (job #2024849) | Cod sursa (job #3131766) | Cod sursa (job #636772)
Cod sursa(job #636772)
#include <stdio.h>
int N, M, x[1024][1024], D[1024][1024];
#define DIM 8192
char ax[DIM+16];
int pz;
inline void cit(int &x) //parsare luata de la blasterz, ms frumos :)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax, 1, DIM, stdin), pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1, DIM, stdin),pz=0;
}
}
int check (int i, int j)
{
int st = j - 1, dr = j + 1, l = 1;
while (st > 0 && dr <= M)
{
if (x[i][st] != x[i][dr])
return l;
st --;
dr ++;
l += 2;
}
return l;
}
int main ()
{
int i, j, max = 1, k;
freopen ("dreptpal.in", "r", stdin);
freopen ("dreptpal.out", "w", stdout);
scanf ("%d%d", &N, &M);
for (i = 1; i <= N; i ++)
for (j = 1; j <= M; j ++)
cit (x[i][j]);
for (i = 1; i <= N; i ++)
for (j = 1; j <= M; j ++)
D[i][j] = check (i, j);
for (j = 1; j <= M; j ++)
for (i = 1; i <= N; i ++)
{
if (D[i][j] == D[i - 1][j])
continue;
if ((N - i + 1) * D[i][j] < max)
continue;
for (k = i; k <= N; k ++)
if (D[k][j] < D[i][j])
break;
if ((k - i) * D[i][j] > max)
max = (k - i) * D[i][j];
}
if (max == N && M > N)
max = M;
printf ("%d", max);
return 0;
}