Cod sursa(job #3163585)

Utilizator adelina_15InfoAdelina Radoi adelina_15Info Data 31 octombrie 2023 17:37:44
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

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

vector<int> pi;

string x;

int KMP()
{
    pi.clear();
    pi.resize(x.size());
    int k = 0;
    pi[0] = 0;
    int maxim = 0;
    for(int i = 1; i < x.size(); i++)
    {
        while(k != 0 && x[i] != x[k])
            k = pi[k-1];
        if(x[k] == x[i])
            k++;
       pi[i] = k;
    }
    int rasp = 0;
    for(int i = 0; i < x.size(); i++)
    {
        if((i+1) % (i+1-pi[i]) == 0 && pi[i] != 0)
            rasp = i+1;

    }
    return rasp;
}

int main()
{
    int t;
    fin >> t;
    for(int test = 0; test < t; test++)
    {
        fin >> x;
        fout << KMP() << "\n";
    }
    return 0;
}