Cod sursa(job #1628424)

Utilizator pickleVictor Andrei pickle Data 4 martie 2016 00:26:12
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include <string>

using namespace std;
const int Nmax = 1000666;

string A;
int T, ans = 0, m[Nmax], q;

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

  fin >> T;
  while(T--) {
    fin >> A;
    ans = 0;
    m[0] = -1;
    q = -1;
    for (size_t k = 1; k < A.size(); ++k) {
      while(q >= 0 && A[k] != A[q+1])
        q = m[q];
      if (A[k] == A[q+1])
        ++q;
      m[k] = q;
    }

    for (int k = A.size() -1; k >= 0; --k) {
      if (m[k] >= 0 && ((k+1) % (k - m[k]) == 0)) {
        ans = k+1;
        break;
      }
    }

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

  return 0;
}