Cod sursa(job #988062)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 21 august 2013 22:20:17
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 = 1000003;

char S[NMAX];
int PI[NMAX], L;

int make_prefix () {

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

}

int main () {

    freopen ("prefix.in", "r", stdin);
    freopen ("prefix.out", "w", stdout);
    int T;
    for (scanf ("%d", &T); T--;) {
        scanf ("%s", S + 1);
        L = strlen (S + 1);
        printf ("%d\n", make_prefix ());
    }

}