Cod sursa(job #2330219)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 28 ianuarie 2019 08:53:04
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,t,i,k,kmp[1000010],len[1000010];
bitset<1000010> per;
string s;

int main()
{
    f>>t;
    for(;t;t--)
    {
        f>>s;n=s.size();k=0;
        int ans=0;
        for(i=2;i<=n;i++)
        {
            while(k&&s[k]!=s[i-1])
                k=kmp[k];
            if(s[k]==s[i-1])
                k++;
            kmp[i]=k;
            per[i]=0,len[i]=0;
            if(!(i&1))
                if(kmp[i]==i/2)
                    per[i]=1,len[i]=i/2;

            if(per[kmp[i]]&&(i-kmp[i])==len[kmp[i]])
                per[i]=1,len[i]=len[kmp[i]];
            if(per[i])ans=i;
//            if(t==5)
//                cout<<' '<<i<<' '<<kmp[i]<<' '<<len[i]<<'\n';
        }
        g<<ans<<'\n';
//        for(i=1;i<=n;i++)
//            g<<kmp[i]<<' ';
//        g<<'\n';
    }
    return 0;
}