Advertisement
welleyth

G. SEERC 2022

Dec 10th, 2022
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.68 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7.  
  8. #define int long long
  9. #define mp make_pair
  10. #define pb push_back
  11.  
  12. #pragma GCC optimize("Ofast")
  13. #pragma GCC optimize("unroll-loops")
  14. #pragma GCC target("avx2")
  15.  
  16. typedef long long ll;
  17.  
  18. constexpr int N = (int)1e6+11;
  19. constexpr int INF = (int)1e18;
  20. constexpr int md = (int)1e9+7;
  21.  
  22. void add(int& a,int b){
  23.     a = (a+b >= md ? a+b-md : a+b);
  24. }
  25. void sub(ll& a,ll b){
  26.     a = (a-b < 0 ? a-b+md : a-b);
  27. }
  28.  
  29. mt19937 rnd(time(nullptr));
  30.  
  31. constexpr int K = (int)1e8;
  32.  
  33. void solve(){
  34.     int n;
  35.     cin >> n;
  36.  
  37.     map<int,int> Input;
  38.     map<int,int> cnt[2];
  39.     int cur = 0;
  40.     int dist[n+1];
  41.     int x[n+1];
  42.     for(int i = 0; i < n; i++){
  43.         cin >> x[i];
  44.     }
  45.     for(int i = 1; i < n; i++){
  46.         dist[i] = x[i] - x[i-1];
  47.     }
  48.     cnt[0][0] = 1;
  49.     for(int i = 1; i < n; i++){
  50.         cur = dist[i] - cur;
  51. //        cerr << "cur = " << cur << "\n";
  52. //        cerr << "id = " << (i&1^1) << "\n";
  53.         cnt[(i&1)][cur]++;
  54.     }
  55.  
  56.     set<int> st;
  57.     for(int i = 0; i < n; i++){
  58.         int r;
  59.         cin >> r;
  60.         Input[r]++;
  61.         st.insert(r);
  62.     }
  63.     vector<int> R(st.begin(),st.end());
  64.     vector<pair<int,int>> v;
  65.     for(auto& x : R){
  66.         v.pb(mp(Input[x],x));
  67.     }
  68.     sort(v.rbegin(),v.rend());
  69.     vector<int> ans;
  70.     int x0 = v[0].second;
  71. //    cerr << "x0 = " << x0 << "\n";
  72. //    cerr << "Input[x0] = " << Input[x0] << "\n";
  73.     for(auto& r1 : R){
  74. //        cerr << "r1 = " << r1 << "\n";
  75. //        cerr << "cnt[0][x0-r1] = " << cnt[0][x0-r1] << "\n";
  76. //        cerr << "cnt[1][x0+r1] = " << cnt[1][x0+r1] << "\n";
  77.         if(Input[x0] == cnt[0][x0-r1] + cnt[1][x0+r1]){
  78. //            cerr << "ok r1 = " << r1 << "\n";
  79.             ans.pb(r1);
  80.         }
  81.     }
  82. //    return;
  83.     for(int i = 1; i < v.size(); i++){
  84.         vector<int> nw;
  85.         int x = v[i].second;
  86.         for(auto& r1 : ans){
  87.             if(Input[x] == cnt[0][x-r1] + cnt[1][x+r1])
  88.                 nw.pb(r1);
  89.         }
  90.         swap(ans,nw);
  91.     }
  92.     assert(!ans.empty());
  93.  
  94.     int r1 = ans[0];
  95.     cur = 0;
  96.     cout << r1 << " ";
  97.     for(int i = 1; i < n; i++){
  98.         cur = dist[i] - cur;
  99.         cout << cur + (i % 2 == 1 ? -r1 : r1) << " ";
  100.     }
  101.     cout << "\n";
  102.  
  103.     return;
  104. }
  105.  
  106. signed main(){
  107.     ios::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr);
  108. //    freopen("input.txt","r",stdin);
  109. //    freopen("output.txt","w",stdout);
  110.     int tests = 1;
  111. //    cin >> tests;
  112.     for(int test = 1; test <= tests; test++){
  113.         solve();
  114.     }
  115.     return 0;
  116. }
  117. /**
  118. **/
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement