Cod sursa(job #2974885)

Utilizator IanisBelu Ianis Ianis Data 4 februarie 2023 19:40:28
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#include <bits/stdc++.h>
#define endl '\n'
#endif

const int NMAX = 1e6+5;

int n;
char s[NMAX];
int lps[NMAX];

void reset() {
    memset(s, 0, sizeof(s));
    memset(lps, 0, sizeof(lps));
}

void read() {
    fin >> s;
    n = strlen(s);
}

void build_lps(int lps[], char a[], int n) {
    int j = 0;
    for (int i = 1; i < n; i++) {
        if (a[i] == a[j]) {
            lps[i] = ++j;
        } else {
            if (j == 0) {
                lps[i] = 0;
            } else {
                j = lps[j - 1];
                i--;
            }
        }
    }
}

int solve() {
    build_lps(lps, s, n);
    int ans = 0;
    for (int i = 0; i < n; i++) {
        if (lps[i] == 0) continue;
        int len = i - lps[i] + 1;
        if ((i + 1) % len == 0)
            ans = i + 1;
    }
    return ans;
}

int main() {
    int t;
    fin >> t;
    while (t--) {
        reset();
        read();
        fout << solve() << endl;
    }
    return 0;
}