Cod sursa(job #2720505)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 10 martie 2021 21:49:31
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> preffix_function(const string &A) {
    vector<int> pi(A.size());
    int N = A.size() - 1;
    for(int i = 2, q = 0; i <= N; ++i) {
        while(q && A[q + 1] != A[i])
            q = pi[q];
        if(A[q + 1] == A[i])
            ++q;
        pi[i] = q;
    }
    return pi;
}

void test_case() {
    string s;
    fin >> s;
    s = '0' + s;
    vector<int> pi = preffix_function(s);
    int N = s.size() - 1;
    for(int i = N; i > 0; --i)
        if(pi[i] && i % (i - pi[i]) == 0) {
            fout << i << '\n';
            return;
        }
    fout << "0\n";
}

int main() {
    int T;
    fin >> T;
    for(int tc = 0; tc < T; ++tc)
        test_case();
}