Mai intai trebuie sa te autentifici.
Cod sursa(job #635774)
| Utilizator | Data | 19 noiembrie 2011 14:50:00 | |
|---|---|---|---|
| Problema | DreptPal | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | .com 2011 | Marime | 1.62 kb |
#include <stdio.h>
#define Nmax 1005
#define Mmax 1005
int 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()
{
int k,l,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
{
for(j=i+1;j<=n && pali(j,k,l);j++);
if((j-i+1)%2)
s=(l-k+1)*(j-i+1);
else
s=(l-k+1)*(j-i);
if(s>smax)
smax=s;
}
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
{
for(j=i+1;j<=n && palip(j,k,l);j++);
if((j-i+1)%2)
s=(l-k+1)*(j-i+1);
else
s=(l-k+1)*(j-i);
if(s>smax)
smax=s;
}
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;
}