Pagini recente » Cod sursa (job #85701) | Cod sursa (job #3161920) | Cod sursa (job #74505)
Cod sursa(job #74505)
#include <cstdio>
#define fin "map.in"
#define fout "map.out"
#define Nmax 2048
#define FL
#define DBGx
int N,M,ret,pi[Nmax];
char map[Nmax][Nmax];
inline int cmp(int p1,int p2) //egal - 0 ; altfel 1
{
int i;
for (i=1;i<=N;++i)
if (map[p1][i]!=map[p2][i])
return 1;
return 0;
}
void read()
{
int i,pi,pj;
char buff[4096];
pi=1; pj=0;
while (1)
{
fread(buff,1,4096,stdin);
for (i=0;i<4096;++i)
if ('a'<=buff[i] && buff[i]<='z')
{
++pj;
if (pj>M)
{
++pi;
pj=1;
}
map[pi][pj]=buff[i];
if (pi==N && pj==M)
return;
}
}
}
int main()
{
int i,j,k,p;
char aux;
freopen(fin,"r",stdin);
#ifdef FL
freopen(fout,"w",stdout);
#endif
scanf("%d%d",&N,&M);
fgetc(stdin);
for (i=1;i<=N;i++)
fgets(map[i]+1,Nmax,stdin);
//read();
for (i=1;i<=N;++i)
for (j=i;j<=M;++j)
{
aux=map[i][j];
map[i][j]=map[j][i];
map[j][i]=aux;
}
#ifdef DBG
for (i=1;i<=M;++i)
{
for (j=1;j<=N;++j)
printf("%c",map[i][j]);
printf("\n");
}
#endif
pi[1]=0;
k=0;
for (i=2;i<=M;++i)
{
while (k>0 && cmp(i,k+1)!=0)
k=pi[k];
if (cmp(i,k+1)==0)
++k;
pi[i]=k;
}
ret=M;
p=pi[M];
while (p>0)
{
if (p>M/2)
ret=p;
p=pi[p];
}
printf("%d\n",ret);
return 0;
}