Cod sursa(job #777880)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 13 august 2012 17:14:12
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#include <cstring>

using namespace std;

const int kMaxN = 1000005;

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

ifstream fin("prefix.in");
ofstream fout("prefix.out");

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

void Read() {
    L = 0;
    fin.getline(S+1, kMaxN);
    N = strlen(S+1);
}

void Print() {
    fout << L << "\n";
}

int main() {
    int T; fin >> T; fin.get();
    for (; T; --T) {
        Read();
        KMP();
        Print();
    }
    return 0;
}