Cod sursa(job #2504302)

Utilizator stefan.popescuPopescu Stefan stefan.popescu Data 4 decembrie 2019 19:46:28
Problema Prefix Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
ifstream in ("prefix.in");
ofstream out("prefix.out");
char s[1000010];
int lps[1000010], lenfin, len, t, dif;
int main()
{

    in.getline(s, 1000001); t=atoi(s);
    s[0]=' ';
    for(int q=1; q<=t; q++)
    {
        in.getline(s+1, 1000001);
        lps[1]=lenfin=len=0;
        for(int i=2; i<strlen(s); i++)
        {
            len=lps[i-1];
            while(s[len+1]!=s[i]&&len>0)
                len=lps[len];
            if(s[len+1]==s[i])
                len++;
            lps[i]=len; dif=i-len;
            if(len!=0&&i%dif==0)
                lenfin=i;
        }
        out<<lenfin<<"\n";
    }
    return 0;
}