Cod sursa(job #1882105)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 16 februarie 2017 22:50:18
Problema Prefix Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char str[1000005],prf[1000005];
int main()
{
    int i,k,n,p,t,ok;
    fin>>t;
    while(t--)
    {
        fin>>(str+1);
        n=strlen(str+1);
        prf[1]=0;
        k=0;
        for(i=2;i<=n;i++)
        {
            while(k>0 &&str[i]!=str[k+1])
            {
                k=prf[k];
            }
            if(str[i]==str[k+1]) k++;
            prf[i]=k;
        }
        ok=0;
        for(i=n;i>=0;i--)
        {
            if(prf[i]!=0)
            {
                p=i-prf[i];
                if(prf[i]%p==0)
                {
                    ok=1;
                    fout<<i<<"\n";
                    break;
                }
            }
            if(ok==1) break;
        }
        if(ok==0) fout<<"0\n";
    }
}