Cod sursa(job #2573356)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 5 martie 2020 17:16:18
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <cstring>

#define NMAX 1000005
using namespace std;

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

int PI[NMAX];
char s[NMAX];

int prefix(int n){
    int k = 0;
    int rez = 0;
    for(int i = 2; i <= n; ++i){
        while(k > 0 && s[k + 1] != s[i])
            k = PI[k];
        if(s[k + 1] == s[i])
            ++k;
        PI[i] = k;
        if(PI[i] > 0 && PI[i] % (i - PI[i]) == 0)
            rez = i;
    }
    return rez;
}

int main()
{
    int t;
    fin >> t;

    fin.get();
    while(t --){
        fin.getline(s + 1, NMAX);

        int lg = strlen(s + 1);
        fout << prefix(lg) << '\n';
    }
    return 0;
}