Pagini recente » Cod sursa (job #385897) | Cod sursa (job #2276004) | Cod sursa (job #890201) | Cod sursa (job #2834159) | Cod sursa (job #637659)
Cod sursa(job #637659)
#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){
for (int e=1;e<=M;++e) V[e]=0;
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--;
//for (int e=1;e<=M;++e) V[e]=0;
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){
//for (int e=1;e<=M;++e) V[e]=0;
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;
//}
//}
}
if (N%2==0) N--;
if (N>arie_max) arie_max=N;
printf("%d\n", arie_max);
return 0;
}