Cod sursa(job #3268773)

Utilizator Andercau_VasileAndercau Vasile Andercau_Vasile Data 17 ianuarie 2025 09:16:33
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <cstring>
#include <cmath>
using namespace std;

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

#define NMAX 1000005

char s[NMAX];
int prefix[NMAX];

void build(int n) {
    int k = 0;
    prefix[1] = 0;
    for (int i = 2; i <= n; ++i) {
        while (k >= 1 && s[k + 1] != s[i]) {
            k = prefix[k];
        }
        if (s[k + 1] == s[i]) {
            k++;
        }
        prefix[i] = k;
    }
}

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

        int n = strlen(s + 1);

        build(n);

        int lmax = 0;
        for (int i = n; i >= 1 && !lmax; --i) {
            if (i % (i - prefix[i]) == 0 && prefix[i]) {
                lmax = i;
            }
        }

        fout << lmax << '\n';
    }
    return 0;
}