Cod sursa(job #335325)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 29 iulie 2009 15:42:48
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <algorithm>
using namespace std;

#define DIM 1000001

int t, lg, rez, pi[ DIM ];
char s[ DIM ];

void calc_pi() {

    int i, k;

    k = rez = pi[ 1 ] = 0;
    for( i = 2; i <= lg; ++ i ) {

        while( s[ k + 1 ] != s[ i ] && k )
            k = pi[ k ];
        if( s[ k + 1 ] == s[ i ] )
            ++ k;
        if( ( i % ( i - k ) ) == 0 && k )
            rez = i;
    }
}

void solve() {

    int i;

    scanf( "%d\n", &t );
    for( i = 0; i < t; ++ i ) {

        gets( s + 1 );
        lg = strlen( s + 1 );
        calc_pi();
        printf( "%d\n", rez );
    }
}

int main() {

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

    solve();

    return 0;
}