Cod sursa(job #635738)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 19 noiembrie 2011 14:38:17
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.45 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];
				//caut o linie palindrom si impara
				 while(!is_palindrom(V,1,nr)){
					 l++;
					 V[++nr]=A[i][l];
					 if (l>M) break;
					 if (nr%2==0) continue;
				 }
				 //l--;
				 //nr--;
				 if (is_palindrom(V,1,nr)){//am gasit palindromu, acum caut in jos
					 arie=(l-j+1);
					 int aa=arie;
					 for (k=i+1;k<=N;++k){
						   memset(V,0,sizeof(V));
						   nr=0;
						   for (a=j;a<=l;++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;
	
}