Cod sursa(job #527067)
Utilizator | George Marcus PlayLikeNeverB4 | Data | 30 ianuarie 2011 16:07:18 |
---|---|---|---|
Problema | Prefix | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.52 kb |
#include <stdio.h>
#include <string>
#define maxn 1000010
int i,T,N,p,max;
char A[maxn],P[maxn];
int pi[maxn];
void kmp()
{
int k=0;
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;
if(i%(i-k)==0 && k>0)
max=i;
}
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&T);
for(int t=1;t<=T;t++)
{
scanf("%s",A+1); A[0]=' '; N=strlen(A)-1;
kmp();
printf("%d\n",max);
}
}