Cod sursa(job #3204968)

Utilizator Mihai_PopescuMihai Popescu Mihai_Popescu Data 18 februarie 2024 13:54:53
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <cstring>
using namespace std;

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

#define NMAX 1000005

char s[NMAX];
int p[NMAX];
int l;

void build() {
    int k = 0;

    for (int i = 2; i <= l; ++i) {
        while (k > 0 && s[i] != s[k + 1]) {
            k = p[k];
        }
        if (s[i] == s[k + 1]) {
            k++;
        }
        p[i] = k;
    }
}

int main() {
    int t;
    fin >> t;
    fin.get();
    while (t--) {
        fin.getline(s + 1, NMAX - 1);
        s[0] = 'a';
        l = strlen(s) - 1;

        build();

        bool gasit = 0;
        for (int i = l; i >= 1 && !gasit; --i) {
            if (i % (i - p[i]) == 0 && p[i]) {
                fout << i << '\n';
                gasit = 1;
            }
        }
        if (!gasit) {
            fout << "0\n";
        }
    }
    return 0;
}