Cod sursa(job #966254)

Utilizator matei_cChristescu Matei matei_c Data 25 iunie 2013 15:53:33
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<cstring>
using namespace std ;

#define maxn 1000005

char sir[maxn] ;
int len ;
int pi[maxn] ;

void prefix()
{
    int k = 0 ;
    int poz = 2 ;
    pi[0] = 0 ;

    while( sir[poz] != NULL )
    {
        while( k && sir[ k + 1 ] != sir[poz] )
            k = pi[k] ;

        if( sir[ k + 1 ] == sir[poz] )
            ++k ;

        pi[poz] = k ;

        ++poz ;
    }
}

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

    int tst ;
    scanf("%d\n", &tst);

    while( tst-- )
    {
        gets( sir + 1 ) ;
        len = strlen( sir + 1 ) ;

        prefix() ;

        bool ok = false ;

        for(int i = len; i >= 0; --i )
        {
            if( pi[i] && i % ( i - pi[i] ) == 0 )
            {
                printf("%d\n", i) ;
                ok = true ;
                break ;
            }
        }

        if( ok == false )
            printf("0\n") ;
    }

    return 0 ;
}