Cod sursa(job #636379)

Utilizator VladberilaVladutz Vladberila Data 19 noiembrie 2011 19:28:37
Problema DreptPal Scor 10
Compilator cpp Status done
Runda .com 2011 Marime 2.04 kb
#include <cstdio>
#include <iostream>
#define Nmax 1010
#define Mmax 1010
using namespace std;
long m,n,A[Nmax][Mmax],i,j;
int pali(long i,long k,long l)
{
	while(l>k)
	{
		if(A[i][k]!=A[i][l])
			return 0;
		k++;
		l--;
	}
	return 1;
}
void solve()
{
	long k,ok,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]);
	for(i=1;i<=n;i++)
	{
		k=1;
		l=m;
		while(k<l)
		{
			if(pali(i,k,l))
			{
				while(k<l)
				{
					j=i;
					pos=j-1;
					while(j<=n)
					{
						ok=0;
						while(pali(j,k,l) && j<=n)
							j++,ok=1;
						if(ok)
						{
							pos++;
							if((j-pos)%2)
								s=(l-k+1)*(j-pos);
						    else
								s=(l-k+1)*(j-pos-1);
							if(s>smax)
								smax=s;
							pos=j-1;
						}
						else
						{
							j++;
							pos=j-1;
						}
					}
					k++;
				}
			}
			k++;
		}
		k=1;
		l=m;
		while(k<l)
		{
			if(pali(i,k,l))
			{
				while(k<l)
				{
					j=i;
					pos=j-1;
					while(j<=n)
					{
						ok=0;
						while(pali(j,k,l) && j<=n)
							j++,ok=1;
						if(ok)
						{
							pos++;
							if((j-pos)%2)
								s=(l-k+1)*(j-pos);
						    else
								s=(l-k+1)*(j-pos-1);
							if(s>smax)
								smax=s;
							pos=j-1;
						}
						else
						{
							j++;
							pos=j-1;
						}
					}
					l--;
				}
			}
			l--;
		}
		k=1;
		l=m;
		while(k<l)
		{
			if(pali(i,k,l))
			{
				while(k<l)
				{
					j=i;
					pos=j-1;
					while(j<=n)
					{
						ok=0;
						while(pali(j,k,l) && j<=n)
							j++,ok=1;
						if(ok)
						{
							pos++;
							if((j-pos)%2)
								s=(l-k+1)*(j-pos);
						    else
								s=(l-k+1)*(j-pos-1);
							if(s>smax)
								smax=s;
							pos=j-1;
						}
						else
						{
							j++;
							pos=j-1;
						}
					}
					k++;
					l--;
				}
			}
			k++;
			l--;
		}
	}
	printf("%d",smax);
}
int main()
{
	solve();
	return 0;
}