Cod sursa(job #2749301)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 6 mai 2021 11:41:26
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>

const int NMAX = 1e6;

int pi[1 + NMAX];

std::string a;

int main() {
  std::ifstream in("prefix.in");
  std::ofstream out("prefix.out");

  int tests;
  in >> tests;

  while (tests--) {
    in >> a;
    int ans = 0;

    memset(pi, 0, sizeof(pi));

    a = "." + a;

    int k = 0;
    pi[1] = 0;

    for (int i = 2; i < a.size(); ++i) {
      while (k > 0 && a[k + 1] != a[i])
        k = pi[k];

      if (a[k + 1] == a[i])
        ++k;

      pi[i] = k;

      int x = i - k;
      if (i % x == 0 && i != x)
        ans = std::max(ans, i);
    }

    out << ans << '\n';
  }

  return 0;
}