Cod sursa(job #1105753)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 12 februarie 2014 00:39:45
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>

#define Lmax 1000005

using namespace std;
char A[Lmax];
int N,T,P[Lmax];

void make_prefix()
{
    int i , q = 0;
    for(i = 2; i <= N; ++i)
    {
        while(q && A[i] != A[q+1])
            q = P[q];
        if(A[i] == A[q+1])
            ++q;
        P[i] = q;
    }
}

void get_period()
{
    for(int i = N; i >= 1; --i)
        if(P[i] && i - P[i] && i % (i-P[i]) == 0)
        {
            printf("%d\n",i);
            return;
        }
    printf("0\n");
}

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

    scanf( "%d" , &T );
    while( T-- )
    {
        scanf("%s",A+1);A[0] = '*';
        N = strlen(A) - 1;
        make_prefix();
        get_period();
    }

    return 0;
}