Cod sursa(job #335320)

Utilizator DraStiKDragos Oprica DraStiK Data 29 iulie 2009 15:36:27
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#include <string.h>

#define DIM 1000005

char a[DIM];
int pi[DIM];
int n,t,nrt;

void clean ()
{
    int i;

    for (i=1; i<=n; ++i)
        pi[i]=0;
}

void kmp_smen (char a[DIM])
{
    int i,k;

    for (k=0, i=2; i<=n; ++i)
    {
        for ( ; a[k+1]!=a[i] && k>0; )
            k=pi[k];
        if (a[k+1]==a[i])
            ++k;
        pi[i]=k;
        if (!(i%(i-k)) && k>0)
            nrt=i;
    }
}

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

    scanf ("%d\n",&t);
    for (i=1; i<=t; ++i)
    {
        clean ();
        gets (a+1);
        n=strlen (a+1);
        kmp_smen (a);
        printf ("%d\n",nrt);
    }

    return 0;
}