Cod sursa(job #2808504)

Utilizator DordeDorde Matei Dorde Data 25 noiembrie 2021 11:10:11
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
int const N = 1e6 + 3;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int z [N];
char s [N];
int main()
{
    int t;
    fin >> t;
    while (t --){
        fin >> s;
        int n = strlen (s);
        fill (z , z + N , 0);
        int l (0) , r (0);
        for(int i = 1 ; i < n ; ++ i){
            if (i <= r)
                z [i] = min (z [i - l] , r - i + 1);
            while (i + z [i] < n && s [z [i]] == s [z [i] + i])
                ++ z [i];
            if (i + z [i] - 1 > r){
                r = i + z [i] - 1;
                l = i;
            }
        }
        int ans (0);
        for(int i = 1 ; i <= n ; ++ i){
            int j = 0;
            while (j + i < n && z [j + i] >= i)
                j += i;
            if (j)
                ans = max (ans , j + i);
        }
        fout << ans << '\n';
    }
    return 0;
}