Cod sursa(job #2791802)

Utilizator rARES_4Popa Rares rARES_4 Data 31 octombrie 2021 09:01:29
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("prefix.in");
ofstream g ("prefix.out");
int n,l_sir;
char sir[1000001];
int prefixe[1000001];
int formare_prefixe()
{
    int i = 0,j = -1;
    prefixe[0] = -1;
    int rasp = 0;
    while(i<l_sir)
    {
        while(j>=0 && sir[i]!=sir[j])
        {
            j = prefixe[j];
        }
        i++;
        j++;
        prefixe[i] = j;
        //formam prefixe ca la kmp
        //si cand este indeplinita conditia inseamna ca am gasit o prefix periodic
        int sir_din_fata = i - prefixe[i];
        if(prefixe[i] !=0 && i%sir_din_fata == 0)
            rasp = i;
    }
    return rasp;
}
int main()
{
    f >> n;
    f.get();
    for(int i = 1;i<=n;i++)
    {
        f >> sir;
        l_sir = strlen(sir);
        g << formare_prefixe()<< endl;
    }
}