Cod sursa(job #2125206)

Utilizator alexilasiAlex Ilasi alexilasi Data 8 februarie 2018 11:15:47
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define nmax 1000100
using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

int t,pi[nmax],i,k,n,streak,pozstart,ans;

char s[nmax];

int main()
{
    fin>>t;
    while(t)
    {
        fin>>s+1;
        n=strlen(s+1);
        pi[1]=0;
        k=0;
        for(i=2;i<=n;i++)
        {
            while(k>0&&s[k+1]!=s[i])
                k=pi[k];
            if(s[k+1]==s[i])k++;
            pi[i]=k;
        }
        ans=0;pozstart=0;streak=0;
        for(i=1;i<=n;i++)
        {
            if(streak)
            {
             if(pi[i]==streak+1){streak++;continue;}
             if(streak>=pozstart-1)ans=max(ans,(streak/(pozstart-1)+1)*(pozstart-1));
             if(pi[i]==1){streak=1;pozstart=i;}
             else streak=0;
            }
            else if(pi[i]==1){streak=1;pozstart=i;}

        }
        if(streak>=pozstart-1)ans=max(ans,(streak/(pozstart-1)+1)*(pozstart-1));
        fout<<ans<<'\n';
        //for(i=1;i<=n;i++)
       //     fout<<pi[i]<<" ";
        //fout<<'\n';
        t--;
    }
    return 0;
}