Cod sursa(job #2068359)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 17 noiembrie 2017 17:28:57
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;
char text[1000002];
int lp[1000005];
int l;
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int n;
    scanf("%d\n", &n);
    while(n--)
    {
        cin.getline(text,1000002);
        scanf("\n");
        l=strlen(text);
        int j=0;
        for (int i=1; i<l; ++i)
        {
            while (j && text[i]!=text[j])
                    j=lp[j-1];
            if(text[i]==text[j])
                ++j;
            lp[i]=j;
        }
        int m=0;
        for(int i=0; i<l; ++i)
        {
            if(lp[i])
            {
                int i1=i+1;
                int lpl=i1-lp[i];
                if(i1%lpl==0)
                    m=i1;
            }
        }
        printf("%d\n", m);
    }
    return 0;
}