Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- using namespace __gnu_pbds;
- #define int long long
- #define mp make_pair
- #define pb push_back
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("avx2")
- typedef long long ll;
- constexpr int N = (int)1e6+11;
- constexpr int INF = (int)1e18;
- constexpr int md = (int)1e9+7;
- void add(int& a,int b){
- a = (a+b >= md ? a+b-md : a+b);
- }
- void sub(ll& a,ll b){
- a = (a-b < 0 ? a-b+md : a-b);
- }
- mt19937 rnd(time(nullptr));
- constexpr int K = (int)1e8;
- void solve(){
- int n;
- cin >> n;
- map<int,int> Input;
- map<int,int> cnt[2];
- int cur = 0;
- int dist[n+1];
- int x[n+1];
- for(int i = 0; i < n; i++){
- cin >> x[i];
- }
- for(int i = 1; i < n; i++){
- dist[i] = x[i] - x[i-1];
- }
- cnt[0][0] = 1;
- for(int i = 1; i < n; i++){
- cur = dist[i] - cur;
- // cerr << "cur = " << cur << "\n";
- // cerr << "id = " << (i&1^1) << "\n";
- cnt[(i&1)][cur]++;
- }
- set<int> st;
- for(int i = 0; i < n; i++){
- int r;
- cin >> r;
- Input[r]++;
- st.insert(r);
- }
- vector<int> R(st.begin(),st.end());
- vector<pair<int,int>> v;
- for(auto& x : R){
- v.pb(mp(Input[x],x));
- }
- sort(v.rbegin(),v.rend());
- vector<int> ans;
- int x0 = v[0].second;
- // cerr << "x0 = " << x0 << "\n";
- // cerr << "Input[x0] = " << Input[x0] << "\n";
- for(auto& r1 : R){
- // cerr << "r1 = " << r1 << "\n";
- // cerr << "cnt[0][x0-r1] = " << cnt[0][x0-r1] << "\n";
- // cerr << "cnt[1][x0+r1] = " << cnt[1][x0+r1] << "\n";
- if(Input[x0] == cnt[0][x0-r1] + cnt[1][x0+r1]){
- // cerr << "ok r1 = " << r1 << "\n";
- ans.pb(r1);
- }
- }
- // return;
- for(int i = 1; i < v.size(); i++){
- vector<int> nw;
- int x = v[i].second;
- for(auto& r1 : ans){
- if(Input[x] == cnt[0][x-r1] + cnt[1][x+r1])
- nw.pb(r1);
- }
- swap(ans,nw);
- }
- assert(!ans.empty());
- int r1 = ans[0];
- cur = 0;
- cout << r1 << " ";
- for(int i = 1; i < n; i++){
- cur = dist[i] - cur;
- cout << cur + (i % 2 == 1 ? -r1 : r1) << " ";
- }
- cout << "\n";
- return;
- }
- signed main(){
- ios::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr);
- // freopen("input.txt","r",stdin);
- // freopen("output.txt","w",stdout);
- int tests = 1;
- // cin >> tests;
- for(int test = 1; test <= tests; test++){
- solve();
- }
- return 0;
- }
- /**
- **/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement