Cod sursa(job #2316999)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 12 ianuarie 2019 17:37:11
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

const int NMAX=1e6+5;

char A[NMAX];

int phi[NMAX];

inline void KMP ()
{
    int N=(int)strlen(A);

    phi[0]=0;

    int ans=0;

    for(int i=1; i<N; ++i)
    {
        while(ans && A[i] != A[ans])
            ans=phi[ans-1];

        if(A[i] == A[ans])
            ++ans;

        phi[i]=ans;
    }
}

inline void Solve ()
{
    int N=(int)strlen(A);

    int ans=0;

    for(int i=0; i<N; ++i)
        if(phi[i])
            if((i+1)%(i+1-phi[i]) == 0)
                ans=i+1;

    g<<ans<<'\n';
}

inline void Read ()
{
    int Q;

    f.tie(NULL);

    f>>Q;

    while(Q--)
    {
        f>>A;

        KMP();

        Solve();
    }
}

int main()
{
    Read();

    return 0;
}