Cod sursa(job #2985624)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 26 februarie 2023 18:44:17
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

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

int n;
string s;
int lps[1000005];


void Init() {
    memset(lps, 0, sizeof(lps));
}

void Solve() {
    Init();

    fin >> s;
    s = '$' + s;

    int ans = 0;
    int len = s.length();

    for (int i = 2; i < len; i++) {
        int currLetter = s[i];
        int currLpsIdx = lps[i - 1];

        while (currLpsIdx && currLetter != s[currLpsIdx + 1]) {
            currLpsIdx = lps[currLpsIdx];
        } 

        if (currLetter == s[currLpsIdx + 1]) {
            currLpsIdx++;
        }

        lps[i] = currLpsIdx;

        int subLen = i - lps[i];
        if (lps[i] != 0 && i % subLen == 0) {
            ans = i;
        }
    }

    fout << ans << '\n';
}

int main() {
    fin >> n;
    for (int i = 0; i < n; i++) {
        Solve();
    }
}