Cod sursa(job #2636078)

Utilizator PatrascuAdrian1Patrascu Adrian Octavian PatrascuAdrian1 Data 16 iulie 2020 15:31:34
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 in("prefix.in");
ofstream out("prefix.out");

const int Nmax = 1e6 + 5;
int pi[Nmax];
int T;
string S;

void make_prefix()
{
    memset(pi,0,sizeof(pi));

    int K = 0, ans = 0;

    for(int i = 1; i < S.size(); ++i)
    {
        while(K > 0 && S[K] != S[i])
            K = pi[K - 1];

        if(S[K] == S[i])
            K++;

        pi[i] = K;

        if(pi[i] && (i + 1) % (i + 1 - pi[i]) == 0)
            ans = i + 1;
    }

    out << ans << '\n';
}

int main()
{
    in >> T;
    //out << '\n';
    while(T--)
    {
        in >> S;
        make_prefix();

        /*for(int i = 0; i < S.size(); ++i)
            out << setw(2) << i + 1 << " ";
        out << '\n';
        for(int i = 0; i < S.size(); ++i)
            out << setw(2) <<  pi[i] <<" ";
            out << "\n\n";*/

    }
    return 0;
}