Cod sursa(job #2486813)

Utilizator hoprixVlad Opris hoprix Data 3 noiembrie 2019 15:18:14
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <bits/stdc++.h>

using namespace std;

const int MAX = 1e6 + 5;
string S;
int p[MAX];

int solve() {
    int n = (int)S.size(), j = 0;
    S.insert(0, " ");
    for(int i = 2; i <= n; ++i) {
        while(j && S[j + 1] != S[i]) j = p[j];
        if(S[j + 1] == S[i]) ++j;
        p[i] = j;
    }
    for(int i = n; i > 0; --i)
        if(p[i] >= (i + 1) / 2 && p[i] % (i - p[i]) == 0) return i;
}

int main() {
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    int T;
    fin >> T;
    while(T--) {
        fin >> S;
        int ans = solve();
        if(ans == 1)ans = 0;
        fout << ans << "\n";
    }
}