Cod sursa(job #1198660)

Utilizator usermeBogdan Cretu userme Data 16 iunie 2014 16:42:08
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

FILE*f=fopen("prefix.in","r");
FILE*h=fopen("prefix.out","w");

int t,n,pref[1000005],k;

char b[1000005];

bool o[1000005];

int main(){
    fscanf(f,"%d\n",&t);
while ( t ){
    --t;
    char c=0;
    n=0;
    fgets(b+1,sizeof(b),f);
    while( c!='\n' ){
        c=b[++n];
    }
    --n;
    pref[1]=0;
    for ( int i=2;i<=n;++i ){
        pref[i]=0;
        o[i]=0;
        k=pref[i-1];
        while ( k>0&&b[k+1]!=b[i] )
            k=pref[k];
        if ( b[k+1]==b[i] )
            ++k;
        pref[i]=k;
    }
    int l=0;
    for ( int i=2;i<=n;++i )
        if ( i%(i-pref[i])==0&&pref[i]!=0 ){
            o[i]=1;
            l=i;
        }
    fprintf(h,"%d\n",l);
}
    return 0;
}