Cod sursa(job #777869)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 13 august 2012 17:03:50
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int kMaxN = 1000005;

int Pi[kMaxN], L;
char S[kMaxN];

void KMP() {
    Pi[1] = 0;
    for (int i = 2, k = 0; S[i]; ++i) {
        while (k && S[i] != S[k+1])
            k = Pi[k];
        k += (S[i] == S[k+1]);
        Pi[i] = k;
        if (i-Pi[i] <= i/2 && i%(i-Pi[i]) == 0)
            L = i;
    }
}

void Read() {
    memset(S, 0, sizeof(S)), L = 0;
    scanf("\n%s", S+1);
}

void Print() {
    printf("%d\n", L);
}

int main() {
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    int T; scanf("%d", &T);
    for (; T; --T) {
        Read();
        KMP();
        Print();
    }
    return 0;
}