Cod sursa(job #977800)

Utilizator smaraldaSmaranda Dinu smaralda Data 26 iulie 2013 17:29:34
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<stdio.h>
#include<string.h>
int pi[1000010];
char sir[1000010];

int solve () {
    int n,i,last=0,p=0;
    n=strlen(sir+1);
    pi[1]=0;
    for(i=2;i<=n;i++) {
        while(p && sir[i]!=sir[p+1])
            p=pi[p];
        if(sir[i]==sir[p+1])
            ++p;
        pi[i]=p;
        if(p && i-p && i%(i-p)==0)
            last=i;
        }
    return last;
}

int main() {
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int tc;
    scanf("%d\n",&tc);
    while(tc)
        {
            gets(sir+1);
            printf("%d\n",solve());
            tc--;
        }
    return 0;
}