Cod sursa(job #174098)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 8 aprilie 2008 14:26:28
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#include <string.h>
#define nMax 1000005
#define maxim(a, b) ((a < b) ? a : b)

long T,i,N,sol=0;
long urm[nMax];
char A[nMax];

void urmatorul(){
     int k=0,i;
     urm[1]=0;
     for (i=2;i<=N;i++){
         while (k>0&&A[k+1]!=A[i])k=urm[k];
         if (A[k+1]==A[i])k++;
         urm[i]=k;
     }
}

int main(){
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);

    scanf("%ld\n",&T);
    for (;T;T--){
        scanf("%s",A+1);
        N=strlen(A+1);

        urmatorul();
        sol=0;
        for (i=N;i;--i)
            if (urm[i]>0)
                if (i%(i-urm[i])==0)
                    {sol=i;break;}
        printf("%ld\n",sol);
    }
return 0;
}