Cod sursa(job #2418128)

Utilizator victoreVictor Popa victore Data 3 mai 2019 18:59:45
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int NMAX = 1e6+5;

char s[NMAX];
int p[NMAX];

int main()
{
    int N,i,j,T;
    cin>>T;

    while(T--)
    {
        cin>>(s+1);
        N = strlen(s+1);

        p[1] = 1;

        int maxim = 0;
        for(i = 2 , j = 1 ; i <= N ; ++i)
        {
            while(j > 1 && s[i] != s[j])
                j = p[j-1];

            if(s[i] == s[j])
                p[i] = ++j;
            else
                p[i] = 1;

            if(p[i] != 1 && (i == p[i] || i % (i - p[i] + 1) == 0) )
                maxim = i;
        }

        //for(i = 1 ; i <= N ; ++i)
          //  cout<<i<<":"<<p[i]<< " " << s[i] <<"\n";
        cout<<maxim<<"\n";
    }
}