Cod sursa(job #908101)

Utilizator FayedStratulat Alexandru Fayed Data 8 martie 2013 18:38:05
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <cstring>
#define NMAX 1000001
using namespace std;

short T;
char S[NMAX];
int m,Lung[NMAX];

void prefix(){

    int k=0;
    Lung[1] = 0;
    for(register int i = 2;i<=m;++i){
        while(k>0 && S[k+1]!=S[i]) k = Lung[k];
        if(S[k+1] == S[i]) k++;
        Lung[i] = k;
    }
}

int main(){

    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&T);
    int ok = 0;
    for(register int i=1;i<=T;++i){
            ok = 0;
            memset(Lung,0,sizeof(Lung));
            scanf("%s",S+1);
            m = strlen(S+1);
            prefix();
            for(register int k=m;k>0 && !ok;--k)
                if(Lung[k] && k%(k-Lung[k]) == 0)
                    printf("%d\n",k), ok = 1;
                if(!ok)
                    printf("0\n");
    }
return 0;
}