Cod sursa(job #636557)

Utilizator VladberilaVladutz Vladberila Data 19 noiembrie 2011 21:15:56
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 3.15 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,q,p;
	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))
			{
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					p--;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
					p--;
				}
			}
			k++;
		}
		k=1;
		l=m;
		while(k<l)
		{
			if(pali(i,k,l))
			{
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					p--;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
					p--;
				}
			}
			l--;
		}
		k=1;
		l=m;
		while(k<l)
		{
			if(pali(i,k,l))
			{
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					p--;
				}
				q=k;
				p=l;
				while(q<p)
				{
					j=i;
					pos=j-1;
					ok=0;
					while(j<=n)
					{
						while(pali(j,q,p) && j<=n)
							j++,ok++;
						j++;
					}
					if(ok%2)
						if(ok*(p-q+1)>smax)
							smax=ok*(p-q+1);
					q++;
					p--;
				}
			}
			k++;
			l--;
		}
	}
	printf("%d",smax);
}
int main()
{
	solve();
	return 0;
}