Cod sursa(job #1495695)
Utilizator | Data | 3 octombrie 2015 14:03:12 | |
---|---|---|---|
Problema | Prefix | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.59 kb |
#include<stdio.h>
#include<string.h>
#define N 1000000
char a[N+1];
int pi[N+1];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t;
scanf("%d",&t);
while(t){
int k=0;
scanf("%s",a+1);
int n=strlen(a+1);
int i;
for(i=2;i<=n;i++){
while(k!=0&&a[i]!=a[k+1])
k=pi[k];
if(a[i]==a[k+1])
k++;
pi[i]=k;
}
i=n;
while(i!=0&&(pi[i]==0||i%(i-pi[i])!=0))
i--;
printf("%d\n",i);
t--;
}
return 0;
}