Cod sursa(job #1005013)

Utilizator thewildnathNathan Wildenberg thewildnath Data 3 octombrie 2013 22:03:20
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
#include<string.h>

char v[1000003];
int pi[1000003];

int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int t,i,n,aux=0;
    scanf("%d\n",&t);
    while(t--)
    {
        gets(v+1);
        n=strlen(v+1);
        memset(pi,0,sizeof(pi));
        for(i=2;i<=n;++i)
        {
            while(v[aux+1]!=v[i]&&aux)
                aux=pi[aux];
            if(v[aux+1]==v[i])
                ++aux;
            pi[i]=aux;
        }
        for(i=n;i>1;--i)
            if(i-pi[i]>0)
                if(pi[i] && i%(i-pi[i])==0)
                break;
        if(i==1)
            i=0;
        printf("%d\n",i);
    }
    return 0;
}