Advertisement
Korotkodul

ХЭШИ G WA

Sep 20th, 2022 (edited)
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define pb(x) push_back(x)
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50.  
  51. ll p = 101, mod=2e9+7;
  52. /*
  53. 6 2
  54. 1 1 2 2 1 1
  55. */
  56.  
  57. bool sh=0;
  58. int main()
  59. {
  60.     ios::sync_with_stdio(0);
  61.     cin.tie(0);
  62.     cout.tie(0);
  63.  
  64.     //int n = s.size();
  65.     int n, m; cin>>n>>m;
  66.     vector <int> s(n);
  67.     for (int i = 0; i < n; ++i){
  68.         cin>>s[i];
  69.     }
  70.     vector <int> ans = {n};
  71.     vector <ll> powp(n,1), pf(n), repf(n);
  72.     for (int i = 1; i < n; ++i){
  73.         powp[i] = powp[i - 1] * p % mod;
  74.     }
  75.     pf[0] = s[0];
  76.     repf[n - 1] = s[n - 1];
  77.     for (int i = 1; i < n; ++i){
  78.         pf[i] = pf[i - 1] + (s[i]) * powp[i];
  79.         pf[i] %= mod;
  80.     }
  81.     for (int i = n - 2; i >= 0; --i){
  82.         repf[i] = repf[i + 1] + (s[i]) * powp[n - 1 - i];
  83.         repf[i] %= mod;
  84.     }
  85.     if (sh){
  86.         cout<<"pf\n";
  87.         cvl(pf);
  88.         cout<<"repf\n";
  89.         cvl(repf);
  90.         cout<<"powp\n"; cvl(powp);
  91.  
  92.     }
  93.     for (int k = 1; k <= n/2; ++k){
  94.         ll re, to,del=0;
  95.         re = repf[n - k] * powp[n - k] % mod;
  96.  
  97.         if (n - 2*k - 1 >= 0){
  98.             del = pf[n - 2*k - 1];
  99.         }
  100.         to = (pf[n - k - 1] - del + mod) % mod * powp[n - 1 - (n - k - 1)] % mod;
  101.         if (sh){
  102.             cout<<"k = "<<k<<"\n";
  103.             cout<<"re = "<<re<<"\n";
  104.             cout<<"to = "<<to<<"\n";
  105.             cout<<"del = "<<del<<"\n";
  106.             cout<<"pf[n - k - 1] = "<<pf[n - k - 1]<<"\n";
  107.             cout<<"n - 1 - (n - k - 1) = "<<n - 1 - (n - k - 1)<<"\n";
  108.             cout<<"powp[n - 1 - (n - k - 1)] = "<<powp[n - 1 - (n - k - 1)]<<"\n";
  109.         }
  110.         if (re == to){
  111.             ans.push_back(n - k);
  112.         }
  113.     }
  114.  
  115.     sort(ans.begin(), ans.end());
  116.     cv(ans);
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement