Pagini recente » Cod sursa (job #300268) | Cod sursa (job #583481) | Cod sursa (job #671816) | Cod sursa (job #681762) | Cod sursa (job #635791)
Cod sursa(job #635791)
#include <stdio.h>
#define Nmax 1005
#define Mmax 1005
long m,n,A[Nmax][Mmax],i,j;
int pali(int i,int k,int l)
{
while(k!=l)
{
if(A[i][k]!=A[i][l])
return 0;
k++;
l--;
}
return 1;
}
int palip(int i,int k,int l)
{
while(l>k)
{
if(A[i][k]!=A[i][l])
return 0;
k++;
l--;
}
return 1;
}
void solve()
{
long k,l,pos,smax=0,s=0;
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++)
scanf("%d",&A[i][j]);
if(m%2)
{
for(i=1;i<=n-1;i++)
{
k=1;
l=m;
while(k!=l)
{
while(k!=l && !pali(i,k,l))
{
k++;
l--;
}
if(k!=l) //am gasit un palindrom
{
j=i+1;
while(j<=n)
{
pos=j-1;
while(pali(j,k,l))
j++;
if((j-pos+1)%2)
s=(l-k+1)*(j-pos+1);
else
s=(l-k+1)*(j-pos);
if(s>smax)
smax=s;
j++;
}
}
k++;
l--;
}
}
k=1;
l=m;
while(k!=l)
{
if(pali(n,k,l))
if((l-k+1)>smax)
smax=l-k+1;
k++;
l--;
}
printf("%d",smax);
}
else
{
for(i=1;i<=n-1;i++)
{
k=1;
l=m;
while(l>k)
{
while(l>k && !palip(i,k,l))
{
k++;
l--;
}
if(k<l) //am gasit un palindrom
{
j=i+1;
while(j<=n)
{
pos=j-1;
while(palip(j,k,l))
j++;
if((j-pos+1)%2)
s=(l-k+1)*(j-pos+1);
else
s=(l-k+1)*(j-pos);
if(s>smax)
smax=s;
j++;
}
}
k++;
l--;
}
}
k=1;
l=m;
while(k<l)
{
if(palip(n,k,l))
if((l-k+1)>smax)
smax=l-k+1;
k++;
l--;
}
printf("%d",smax);
}
}
int main()
{
solve();
return 0;
}