Pagini recente » Cod sursa (job #189281) | Cod sursa (job #524402) | Cod sursa (job #2450441) | Cod sursa (job #1086141) | Cod sursa (job #636424)
Cod sursa(job #636424)
#include <iostream>
#include <cstdio>
using namespace std;
#define maxN 1005
int N , M , aux1 , aux2 , maxi = 0 , x[3] , diml = 0 , dimc = 0;
long long a[maxN][maxN];
struct linii
{
int x , y;
}
li[600005];
struct coloane
{
int x , y;
}
c[6000005];
void retine (int D)
{
if (D == N)
{
++diml;
li[diml].x = x[1];
li[diml].y = x[2];
}
else
if ((x[2] - x[1] + 1) % 2 != 0)
{
++dimc;
c[dimc].x = x[1];
c[dimc].y = x[2];
}
}
void back (int k , int D)
{
for (int i = 1 ; i <= D ; ++i)
{
x[k] = i;
if (x[k] > x[k - 1])
{
if (k == 2)
retine(D);
else back (k + 1 , D);
}
}
}
int main ()
{
freopen ("dreptpal.in" , "r" , stdin);
freopen ("dreptpal.out" , "w" , stdout);
scanf ("%d %d" , &N , &M);
for (int i = 1 ; i <= N ; ++i)
for (int j = 1 ; j <= M ; ++j)
scanf ("%lld" , &a[i][j]);
back (1 , N);
back (1 , M);
bool ok;
for (int p = 1 ; p <= diml ; ++p)
for (int q = 1 ; q <= dimc ; ++q)
{
ok = 1;
for (int i = li[p].x ; i <= li[p].y && ok ; ++i)
for (int j = c[q].x ; j <= (c[q].x + c[q].y) / 2 ; ++j)
if (a[i][j] != a[i][c[q].y - (j - c[q].x + 1) + 1])
{
ok = 0;
break;
}
if (ok)
{
aux1 = li[p].y - li[p].x + 1;
aux2 = c[q].y - c[q].x + 1;
if (aux1 * aux2 > maxi)
maxi = aux1 * aux2;
}
}
printf ("%d" , maxi);
return 0;
}