Advertisement
VisualPaul

Cyclic substrings

Mar 11th, 2015
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5.     string s;
  6.     ios_base::sync_with_stdio(false);
  7.     getline(cin, s);
  8.     int k = 1;
  9.     for (int i = 0; i < s.size(); ++i) {
  10.         int n = (int)s.size();
  11.         vector<int> z(s.size(), 0);
  12.         int l, r = 0;
  13.         for (int i = 1; i < n; ++i) {
  14.             if (i <= r)
  15.                 z[i] = min(r - i + 1, z[i - l]);
  16.             while (i + z[i] < n && s[z[i]] == s[i + z[i]])
  17.                 ++z[i];
  18.             if (i + z[i] - 1 > r) {
  19.                 l = i;
  20.                 r = i + z[i] - 1;
  21.             }
  22.         }
  23.         for (int i = 1; i < n; ++i) {
  24.             if ((i + z[i]) % i == 0) {
  25.                 k = max(k, (i + z[i]) / i);
  26.             }
  27.         }
  28.         s.erase(s.begin());
  29.     }
  30.     cout << k << '\n';
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement