Cod sursa(job #2450452)

Utilizator StanCatalinStanCatalin StanCatalin Data 23 august 2019 13:35:18
Problema Prefix Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

const int dim = 1000002;

char s[dim];
int kmp[dim];

int Rezolva()
{
    int act = 0,rez = 0;
    for (int i=2; i<=strlen(s+1); i++)
    {
        while (act != 0 && s[i] != s[act + 1])
        {
            act = kmp[act];
        }
        if (s[i] == s[act+1])
        {
            act++;
        }
        kmp[i] = act;
        if (kmp[i] != 0 && i%(i - kmp[i]) == 0)
        {
            rez = i;
        }
    }
    return rez;
}

int main(){
    int t;
    in >> t;
    while (t)
    {
        in >> s+1;
        t--;
        out << Rezolva() << "\n";
    }
    return 0;
}