Cod sursa(job #636359)

Utilizator VladberilaVladutz Vladberila Data 19 noiembrie 2011 19:19:30
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.94 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(k!=l)
	{
		if(A[i][k]!=A[i][l])
			return 0;
		k++;
		l--;
	}
	return 1;
}
int palip(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;
		if(m%2)
		{
			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--;
			}
		}
		else
		{
			while(k<l)
			{
				if(palip(i,k,l))
			   	{
					while(k<l)
					{
				    	j=i;
				    	pos=j-1;
				    	while(j<=n)
				    	{
					     	ok=0;
					    	while(palip(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;
}