Cod sursa(job #2298455)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 8 decembrie 2018 10:36:16
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

int T;
string str;
vector<int> phi;

int kmp(string x);

int main()
{
    f >> T;
    for(int i = 1; i <= T; i++) {
        f >> str;
        g << kmp(str) << "\n";
    }


    return 0;
}

int kmp(string x) {
    int MAX = 0;
    phi.resize(x.size() + 3, 0);
    for(int i = 1; i < x.size(); i++) {
        int rez = phi[i - 1];
        while(rez && x[i] != x[rez])
            rez = phi[rez - 1];
        if(x[i] == x[rez]) rez++;
        phi[i] = rez;
        if(((i + 1) - phi[i]) < (i + 1) && (i + 1) % ((i + 1) - phi[i]) == 0)
            MAX = i + 1;
    }
    return MAX;

}