Cod sursa(job #1601596)

Utilizator vladrochianVlad Rochian vladrochian Data 16 februarie 2016 00:19:33
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <fstream>

using namespace std;

const int LEN_MAX = 1e6;

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

char a[LEN_MAX + 5];
int p[LEN_MAX + 5];

int Solve() {
   fin.getline(a + 1, LEN_MAX + 2);

   int i = 2;
   for (int q = 0; a[i]; ++i) {
      while (q > 0 && a[q + 1] != a[i])
         q = p[q];
      if (a[q + 1] == a[i])
         ++q;
      p[i] = q;
   }

   --i;
   while (i > 0 && (p[i] == 0 || p[i] % (i - p[i]) != 0))
      --i;

   return i;
}

int main() {
   int T;
   (fin >> T).ignore(1);
   while (T--)
      fout << Solve() << "\n";
   return 0;
}