Cod sursa(job #777890)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 13 august 2012 17:23:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

const int kMaxN = 1000005;

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

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

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

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

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

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