Cod sursa(job #2003911)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 24 iulie 2017 13:09:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <cstring>

using namespace std;

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

char s[1000010];
int T,prefix[1000010],q,LG,sol;

void make_prefix()
{
    sol=0;
    q=0;
    prefix[1]=0;
    for(int i=2; i<=LG; i++)
    {
        while(q>0 && s[q+1]!=s[i])
            q=prefix[q];
        if(s[q+1]==s[i])
            q++;
        prefix[i]=q;
        if(prefix[i]!=0)
            if(i%(i-prefix[i])==0)
                sol=i;
    }
}

int main()
{
    fin>>T;
    for(int l=1; l<=T; l++)
    {
        fin >> (s+1);
        LG=strlen(s+1);
        s[0]='#';s[LG+1]=0;
        make_prefix();
        fout<<sol<<'\n';
    }
    return 0;
}