Cod sursa(job #1679999)

Utilizator BrandonChris Luntraru Brandon Data 8 aprilie 2016 14:08:17
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <string>

using namespace std;

const int MaxLng = 1000005;

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

int pref[MaxLng];
int T;

void PiInit(const string &str, const int &sz) {
  int k = 0;

  for(int i = 2; i <= sz; ++i) {
    while(k and str[k + 1] != str[i]) {
      k = pref[k];
    }

    if(str[k + 1] == str[i]) {
      ++k;
    }

    pref[i] = k;
  }
}

int main() {
  cin >> T;

  for(int i = 1; i <= T; ++i) {
    string str_read, str;
    cin >> str_read;

    str.push_back('0');
    str += str_read;

    int sz = (int) str.size() - 1;

    PiInit(str, sz);

    bool printed = false;

    for(int i = sz; i >= 1; --i) {
      if(pref[i] and i % (i - pref[i]) == 0) {
        cout << i << '\n';
        printed = true;
        break;
      }
    }

    if(!printed) {
      cout << "0\n";
    }
  }

  return 0;
}