Cod sursa(job #3039399)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 28 martie 2023 15:20:57
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

ifstream fin ("prefix.in");
ofstream fout ("prefix.out");

const int NMAX=1e6+5;

string a;
int p[NMAX];

int kmp(int n)
{
    int i,k=0,rez=0;
    for(i=1;i<n;i++)
    {
        while(a[i]!=a[k] && k>0)
            k=p[k-1];
        if(a[i]==a[k])
            k++;
        p[i]=k;
        int perioada=i-p[i]+1;
        if(p[i]>0 && ((i+1)%perioada)==0)
            rez=i+1;
    }
    return rez;
}

int main()
{
    int t;
    fin>>t;
    while(t--)
    {
        fin>>a;
        int n=a.size();
        fout<<kmp(n)<<"\n";
    }
    return 0;
}