Cod sursa(job #1965449)

Utilizator tudormaximTudor Maxim tudormaxim Data 14 aprilie 2017 13:46:39
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

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

const int maxn = 1e6 + 5;
char S[maxn];
int Pi[maxn], n;

void Prefix() {
    int x = 0;
    memset(Pi, 0, sizeof(Pi));
    for (int i = 2; i <= n; i++) {
        while (x > 0 && S[x + 1] != S[i]) x = Pi[x];
        if (S[x + 1] == S[i]) x++;
        Pi[i] = x;
    }
}

void Solve_test() {
    fin >> (S + 1);
    n = strlen(S + 1);
    Prefix();
    int maxx = 0;
    for (int i = n; i > 0; i--) {
        if (Pi[i] != 0 && i % (i - Pi[i]) == 0) {
            maxx = i;
            i = 0;
        }
    }
    fout << maxx << "\n";
}

int main() {
    ios_base :: sync_with_stdio (false);
    int t;
    fin >> t;
    while (t--) {
        Solve_test();
    }
    fin.close();
    fout.close();
    return 0;
}