Advertisement
yeskendir_sultanov

C. Хорошие подстрочки

Mar 3rd, 2025
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. #define ull unsigned long long
  3.  
  4. using namespace std;
  5.  
  6. const int N = 1e5 + 3;
  7. const ull base = 13;
  8.  
  9. ull h[N], b[N];
  10.  
  11. ull get(int i, int j) {
  12.     return (h[j] - ((i > 0) ? h[i - 1] * b[j - i + 1] : 0));
  13. }
  14.  
  15. int main() {
  16.     string s;
  17.     cin >> s;
  18.     int n = s.size();
  19.     b[0] = 1;
  20.     for (int i = 1; i <= n; ++i) {
  21.         b[i] = b[i - 1] * base;
  22.     }
  23.     h[0] = s[0];
  24.     for (int i = 1; i < n; ++i) {
  25.         h[i] = (h[i - 1] * base + s[i]);
  26.     }
  27.    
  28.     set<int> d;
  29.     for (int i = 1; i * i <= n; ++i) {
  30.         if (n % i == 0) {
  31.             d.insert(i);
  32.             d.insert(n / i);
  33.         }
  34.     }
  35.    
  36.     int ans = 0;
  37.     for (int len: d) {
  38.         ull temp = get(0, len - 1);
  39.         bool ok = true;
  40.         for (int i = len, j = 2 * len - 1; j < n; i += len, j += len) {
  41.             if (get(i, j) != temp) {
  42.                 ok = false;
  43.                 break;
  44.             }
  45.         }
  46.        
  47.         if (ok) {
  48.             ans++;
  49.         }
  50.     }
  51.    
  52.     cout << ans;
  53.     return 0;
  54. }
  55.  
  56.  
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement