Cod sursa(job #2084998)

Utilizator GoogalAbabei Daniel Googal Data 9 decembrie 2017 15:00:27
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

const int LMAX = 1e6;

int t, res;
int pref[LMAX];
string s;

void kmp() {
  for(int i = 1; i < s.size(); i++) {
    int ant = pref[i - 1];
    while(0 < ant && s[i] != s[ant])
      ant = pref[ant - 1];

    pref[i] = ant;
    if(s[i] == s[ant])
      pref[i]++;
  }
}

void clean() {
  res = -1;
  s.clear();
  memset(pref, 0, sizeof(pref));
}

int main()
{
  in >> t;
  for(int test = 1; test <= t; test++) {
    clean();
    in >> s;
    kmp();

    for(int i = 0; i < s.size(); i++) {
      if(0 < pref[i]) {
        int val = i - pref[i] + 1;
        if((i + 1) % val == 0)
          res = i;
      }
    }

    out << res + 1 << '\n';
  }
  return 0;
}