Cod sursa(job #1832124)

Utilizator vladbatalanBatalan Vlad vladbatalan Data 19 decembrie 2016 14:54:53
Problema Prefix Scor 20
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);
        s[0]='#';s[LG+1]=0;
        make_prefix();
        fout<<sol<<'\n';
    }
    return 0;
}