Cod sursa(job #636021)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 19 noiembrie 2011 16:20:48
Problema DreptPal Scor 40
Compilator cpp Status done
Runda .com 2011 Marime 1.68 kb
#include <cstdio>
#include <cstring>

#define file_in "dreptpal.in"
#define file_out "dreptpal.out"

int arie,arie_max;
int N,M,nr;
int i,j,i1,j1,i2,j2,V[1111],A[1111][1111],k,l,a;

int is_palindrom(int V[], int ls, int ld){
	
	int i,j;
	i=ls;
	j=ld;
	while(i<=j){
		if (V[i]!=V[j])
			return 0;
		i++;
		j--;
	}
	return 1;
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_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]);
		 
	arie_max=0;
    for (i=1;i<=N;++i)
         for (j=1;j<=M;++j){
			 memset(V,0,sizeof(V));
				 nr=3;
				 l=j+2;
				 V[nr-2]=A[i][j];
				 V[nr-1]=A[i][j+1];
				 V[nr]=A[i][j+2];
				 int ret1=0,ret2=0;
				//caut o linie palindrom si impara
				 while(l<=M){
					 if (is_palindrom(V,1,nr)){
						 ret1=j;
						 ret2=l;
					 }
					 l++;
					 V[++nr]=A[i][l];
					 l++;
					 V[++nr]=A[i][l];
					 //if (l>M) break;
					 //if (nr%2==0) continue;
				 }
				 //l--;
				 //nr--;
				 memset(V,0,sizeof(V));
				 for (k=ret1;k<=ret2;++k)
					 V[k-ret1+1]=A[i][k];
				 nr=ret2-ret1+1;
				 if (is_palindrom(V,1,nr)){//am gasit palindromu, acum caut in jos
					 arie=(ret2-ret1+1);
					 int aa=arie;
					 for (k=i+1;k<=N;++k){
						   memset(V,0,sizeof(V));
						   nr=0;
						   for (a=ret1;a<=ret2;++a)
							    V[++nr]=A[k][a];
						   if (is_palindrom(V,1,nr))
							   arie+=aa;
						   else
							   break;
					 }
					 if (arie>arie_max)
						 arie_max=arie;
				 }
						 
			 //}	 
		 }
		 
	
	printf("%d\n", arie_max);

	return 0;
	
}