Cod sursa(job #2482958)

Utilizator elenaisaiaElena Isaia elenaisaia Data 29 octombrie 2019 08:52:37
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int n,t,pref[1000003];
char a[1000003];

void prefix()
{
    int p=0;
    for(int i=2;i<=n;i++)
    {
        while(p>0&&a[i]!=a[p+1])
            p=pref[p];
        if(a[i]==a[p+1])
            ++p;
        pref[i]=p;
    }
}

int periodic()
{
    int nr=0,k;
    for(int i=1;i<=n;i++)
    {
        k=i-pref[i];
        if(pref[i]&&i%k==0&&nr<i)
            nr=i;
    }
    return nr;
}

void citire()
{
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    fin>>t;
    a[0]='*';
    for(int i=0;i<t;i++)
    {
        fin>>a+1;
        n=strlen(a+1);
        prefix();
        fout<<periodic()<<"\n";
    }
}

int main()
{
    citire();
    return 0;
}