fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. const int p = 31;
  12. const int MOD = 1e9 + 9277;
  13. const int N = 1e6 + 5;
  14.  
  15. int n;
  16. string s;
  17.  
  18. int p_pow[N], h[N];
  19.  
  20. void precompute() {
  21. p_pow[0] = 1;
  22. for (int i = 1; i <= n; i++) {
  23. p_pow[i] = 1ll * p_pow[i - 1] * p % MOD;
  24. }
  25.  
  26. for (int i = 1; i <= n; i++) {
  27. h[i] = (1ll * h[i - 1] * p + (s[i] - 'a' + 1)) % MOD;
  28. }
  29. }
  30.  
  31. int getHash(int l, int r) {
  32. return (h[r] - 1ll * h[l - 1] * p_pow[r - l + 1] % MOD + MOD) % MOD;
  33. }
  34.  
  35. int main() {
  36. ios::sync_with_stdio(false);
  37. cin.tie(nullptr);
  38. cin >> s;
  39. n = s.size();
  40. s = ' ' + s;
  41.  
  42. precompute();
  43.  
  44. for (int len = 1; len <= n; len++) {
  45. if (getHash(1, n - len) == getHash(1 + len, n)) {
  46. cout << len << ' ';
  47. }
  48. }
  49. }
Success #stdin #stdout 0s 5572KB
stdin
abcabca
stdout
3 6 7