Pagini recente » Cod sursa (job #1169450) | Cod sursa (job #1895179) | Cod sursa (job #2722923) | Cod sursa (job #2374035) | Cod sursa (job #931328)
Cod sursa(job #931328)
#include <stdio.h>
#include <fstream>
#include <string.h>
using namespace std;
#define MAX_N 1000005
#define FIN "prefix.in"
#define FOUT "prefix.out"
FILE *fi,*fo;
char A[MAX_N];
int pi[MAX_N];
int T,N,BEST;
void KMP (void)
{
int i,k=0;
memset(pi,0,sizeof(pi));
pi[1]=0;
for (i=1; i<=N; i++)
{
while (k>0 && A[k]!=A[i])
k=pi[k];
if (A[k]==A[i]) k++;
pi[i+1]=k;
}
}
int main ()
{
int i,j,ok=0;
fi=fopen(FIN,"r");
fo=fopen(FOUT,"w");
fscanf(fi,"%d\n", &T);
for (j=1; j<=T; j++)
{
fgets(A,1000000,fi);
N=strlen(A)-2;
KMP();
ok=0;
for (i=N+1; i>1; i--)
if (pi[i]>0 && i%(i-pi[i])==0)
{
fprintf(fo,"%d\n",i); ok=1;
break;
}
if (!ok) fprintf(fo,"0\n");
}
return 0;
}