Cod sursa(job #2948931)

Utilizator AztecaVlad Tutunaru 2 Azteca Data 28 noiembrie 2022 19:19:01
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e6;

int kmp[NMAX];

void calc_kmp( const string& s ) {
    int n = s.size();
//    cout << "0 ";
    for ( int i = 1; i < n; i ++ ) {
        int x = kmp[i - 1];
        while ( x > 0 && s[i] != s[x] ) {
            x = kmp[x - 1];
        }
        if ( s[i] == s[x] ) kmp[i] = x + 1;
        else kmp[i] = 0;
//        cout << kmp[i] << ' ';
    }
}
int main() {
    ifstream fin( "prefix.in" );
    ofstream fout( "prefix.out" );

    int n = 1;
    string s;
    fin >> n;
    for ( int i = 1; i <= n; i ++ ) {
        fin >> s;
        calc_kmp( s );
        int ans = 0;
        for ( int i = 1; i <= s.size(); i ++ ) {
            if ( kmp[i - 1] && i % ( i - kmp[i - 1] ) == 0 ) ans = max( ans, i );
        }
        fout << ans << '\n';
    }
    return 0;
}