Cod sursa(job #2420197)

Utilizator iandavidroIan David Bocioaca iandavidro Data 11 mai 2019 09:42:15
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<algorithm>
#include<cstring>

using namespace std;

const int NMAX = 1e6+5;

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

ifstream cin("prefix.in");
ofstream cout("prefix.out");

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";
    }
}