Cod sursa(job #3310309)

Utilizator PibooDaniel Spataru Piboo Data 12 septembrie 2025 19:39:54
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

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

int getLongestPeriodicPrefix(const string& s) {
    int n = s.size();
    vector<int> pi = computePrefixFunction(s);
    int maxLen = 0;

    for (int i = 1; i < n; ++i) {
        int len = i + 1;
        int p = len - pi[i];
        if (len % p == 0 && p < len)
            maxLen = len;
    }

    return maxLen;
}

int main() {
    int T;
    fin >> T;
    string s;
    while (T--) {
        fin >> s;
        fout << getLongestPeriodicPrefix(s) << '\n';
    }
    return 0;
}