Pagini recente » Cod sursa (job #1823751) | Rating Robert Plaiasu (Robertoo) | Cod sursa (job #272368) | Cod sursa (job #1617887) | Cod sursa (job #1528500)
#include <stdio.h>
#include <cstring>
#define nmax 1000010
using namespace std;
int n,i,j,nr,urm[nmax],k,sol;
char s[nmax];
int main() {
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&nr); gets(s);
for (i=1;i<=nr;i++) {
gets(s+1); n=strlen(s+1); k=0; urm[1]=0; sol=0;
for (j=2;j<=n;j++) {
while (k>0 && s[k+1]!=s[j]) k=urm[k];
if (s[k+1]==s[j]) k++;
urm[j]=k;
}
for (j=n;j>=1;j--)
if (urm[j]>0 && j%(j-urm[j])==0) {
sol=j; break;
}
printf("%d\n",sol);
}
return 0;
}