Cod sursa(job #1834868)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 25 decembrie 2016 17:54:22
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int MAX_L = 1000000;

char s[MAX_L + 5];
int p[MAX_L + 5];

void prefix (int n) {
  int x = 0;
  for (int i = 2; i <= n; ++i) {
    while (x > 0 && s[x + 1] != s[i])
      x = p[x];
    if (s[x + 1] == s[i])
      ++x;
    p[i] = x;
  }
}

int main() {
  freopen ("prefix.in", "r", stdin);
  freopen ("prefix.out", "w", stdout);
  int t;
  scanf ("%d ", &t);
  for (int i = 1; i <= t; ++i){
    gets(s + 1);
    int n = strlen(s + 1);
    prefix (n);
    bool found = false;
    for (int j = n; j >= 1; --j) {
      if (p[j] != j && p[j] != 0 && j % (j - p[j]) == 0){
        printf ("%d\n", j);
        gasit = true;
        break;
      }
    }
    if (gasit == false)
      printf("0\n");
  }
  return 0;
}