Pagini recente » Cod sursa (job #2835048) | Cod sursa (job #2836947) | Cod sursa (job #1044461) | Cod sursa (job #374122) | Cod sursa (job #73797)
Cod sursa(job #73797)
#include <cstdio>
#include <fstream>
using namespace std;
#define MAX_N 1000005
#define FIN "prefix.in"
#define FOUT "prefix.out"
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=2; i<=N; i++)
{
while (k>0 && A[k+1]!=A[i]) k=pi[k];
if (A[k+1]==A[i]) k++;
pi[i]=k;
}
}
int main ()
{
int i,j,ok=0;
char c='0';
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d\n", &T);
for (j=1; j<=T; j++)
{
A[0]='0'; c='0'; i=1;
while (c!='\n')
{
scanf("%c",&c);
A[i]=c; ++i;
}
N=i-2;
KMP();
// for (i=1; i<=N; ++i)
// printf("%c",A[i]);
for (i=N; i>=1; i--)
if (pi[i] && i%(i-pi[i])==0)
{
printf("%d\n",i); ok=1;
break;
}
if (!ok) printf("0\n");
}
return 0;
}