Cod sursa(job #2312614)

Utilizator PredaBossPreda Andrei PredaBoss Data 5 ianuarie 2019 09:37:18
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int t,n;
string s;
int kmp[1000005];
void make_vector()
{
    int where=0;
    for(int i=1;i<n;i++)
    {
        while(s[i]!=s[where] && where!=0)
            where=kmp[where-1];
        if(s[i]==s[where])
        {
            kmp[i]=where+1;
            where++;
        }
    }
}
void solve()
{
    int ans=0;
    for(int i=0;i<n;i++)
        if(kmp[i]!=0 && (i+1)%(i+1-kmp[i])==0)
            ans=i+1;
    fout<<ans<<"\n";
}
int main()
{
    fin>>t;
    while(t--)
    {
        fin>>s;
        n=(int)s.size();
        memset(kmp,0,sizeof kmp);
        make_vector();
        solve();
    }
    return 0;
}