Cod sursa(job #1822117)

Utilizator cella.florescuCella Florescu cella.florescu Data 4 decembrie 2016 12:31:06
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e6;

string s;
int pi[MAXN + 1];

int main()
{
    int t, n, i, k, ans;
    ifstream fin("prefix.in");
    fin >> t;
    ofstream fout("prefix.out");
    for (t; t > 0; --t) {
      s.clear();
      fin >> s;
      n = s.size();
      for (i = 2, k = ans = 0; i <= n; ++i) {
        while (k > 0 && s[i - 1] != s[k])
          k = pi[k];
        if (s[i - 1] == s[k])
          ++k;
        pi[i] = k;
        if (k && i % (i - k) == 0)
          ans = i;
      }
      fout << ans << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}