Cod sursa(job #635757)

Utilizator VladberilaVladutz Vladberila Data 19 noiembrie 2011 14:45:50
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.58 kb
#include <stdio.h>
#define Nmax 1001
#define Mmax 1001
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--;
    	}
		}
		while(k!=l)
		{
		k=1;
		l=m;
		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;
		if(palip(n,k,l))
			if((l-k+1)>smax)
				smax=l-k+1;
		printf("%d",smax);
	}
}
int main()
{
	solve();
	return 0;
}