Cod sursa(job #2796082)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 7 noiembrie 2021 15:51:36
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> kmp(string s) {
  s = '%' + s;
  vector<int> lps((int)s.size(), 0);
  int k = 0;
  for (int i = 2; i < (int)s.size(); i++) {
    while (k > 0 && s[k + 1] != s[i]) {
      k = lps[k];
    }
    if (s[k + 1] == s[i]) {
      k++;
    }
    lps[i] = k;
  }
  lps.erase(lps.begin());
  return lps;
}

int main() {
  in.tie(NULL);
  ios_base::sync_with_stdio(false);
  int n; in >> n;
  while (n --) {
    string s; in >> s;
    auto lps = kmp(s);
    int result = 0;
    for (int i = 0; i < (int)s.size(); i++) {
      if (lps[i] > 0 && (i + 1) % (i + 1 - lps[i]) == 0) {
        result = i + 1;
      }
    }
    out << result << "\n";
  }
  return 0;
}