Cod sursa(job #2478375)

Utilizator aurelionutAurel Popa aurelionut Data 21 octombrie 2019 22:55:15
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

vector <int> KMP(string &s)
{
    vector <int> pi(s.size(), 0);
    for (int i = 1, k = 0;i < s.size();++i)
    {
        for (;k > 0 && s[k] != s[i];k = pi[k - 1]);
        if (s[i] == s[k])
            ++k;
        pi[i] = k;
    }
    return pi;
}

int main()
{
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    int tests;
    fin >> tests;
    while (tests-- > 0)
    {
        int answer = 0;
        string s;
        fin >> s;
        vector <int> pi = KMP(s);
        for (int i = 1;i < s.size();++i)
        {
            int n = i + 1 - pi[i];
            if (n != i + 1 && (i + 1) % n  == 0)
                answer = i + 1;
        }
        fout << answer << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}