Cod sursa(job #1457821)

Utilizator MihaiEMihaiE MihaiE Data 4 iulie 2015 15:32:53
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 kb
#include <stdio.h>
#include <cstring>
#define nmax 1000010
#define eps 1e-12
using namespace std;
int nr,i,n,j,urm[nmax],k,m;
char s[nmax];
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&n); gets(s);
for (i=1;i<=n;i++) {
    gets(s+1); k=0; urm[1]=0; m=strlen(s+1);
    for (j=2;j<=m;j++) {
        while (k>0 && s[k+1]!=s[j]) k=urm[k];
        if (s[k+1]==s[j]) k++;
        urm[j]=k;
    }
    for (j=m;j>=1;j--)
        if (urm[j]>0 && (j%(j-urm[j]))==0) { printf("%d\n",j); break; }
    if (j==0) printf("0\n");
}
return 0;
}