Cod sursa(job #1987703)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 31 mai 2017 19:55:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>
#include <cstring>

const int MAXN = 1e6;

char pi[MAXN], s[MAXN];

int main() {
  int t, ans, n, q;
  FILE *fin = fopen("prefix.in", "r");
  fscanf(fin, "%d", &t);
  FILE *fout = fopen("prefix.out", "w");
  for (; t > 0; --t) {
    fscanf(fin, "%s", s);
    n = strlen(s);
    q = ans = 0;
    for (int i = 1; i < n; ++i) {
      while ((q > 0) && (s[i] != s[q])) {
        q = pi[q - 1];
      }
      if (s[i] == s[q]) {
        ++q;
      }
      pi[i] = q;
      if ((q) && !((i + 1) % ((i + 1) - q))) {
        ans = i + 1;
      }
    }
    fprintf(fout, "%d\n", ans);
  }
  fclose(fin);
  fclose(fout);
  return 0;
}