Cod sursa(job #1107868)

Utilizator poptibiPop Tiberiu poptibi Data 14 februarie 2014 16:50:05
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>
#include <cstring>
using namespace std;

const int NMAX = 1000010;

int T, N, PI[NMAX];
char S[NMAX];

int LongestPeriodicPrefix()
{
    int Q = 0;
    PI[1] = 0;
    for(int i = 2; i <= N; ++ i)
    {
        while(Q && S[Q + 1] != S[i]) Q = PI[Q];
        if(S[Q + 1] == S[i]) Q ++;
        PI[i] = Q;
    }
    for(int i = N; i; -- i)
        if(PI[i] && i % (i - PI[i]) == 0)
            return i;
    return 0;
}

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

    scanf("%i\n", &T);
    for(; T; T --)
    {
        gets(S + 1);
        N = strlen(S + 1);
        printf("%i\n", LongestPeriodicPrefix());
    }
}