This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//this is gross according to all sensibility
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vl;
const ll LIM = 1e12;
vl wa,wb;
int main() {
	ios::sync_with_stdio(0);cin.tie(0);
	ll n;
	cin >> n;
	vl di;
	for(int i=0;i<n;i++) {
		ll a,b;
		cin >> a >> b;
		wa.push_back(a);
		wb.push_back(b);
		di.push_back(a-b);
	}
	ll st = 0,ed = 1e9+10;
	bool poss = false;
	vl go(n,-1);
	while(st <= ed) {
		ll m = (st+ed)/2;
		ll dif = m-di.back();
		go.back() = m;
		for(int i=n-2;i>=0;i--) {
			go[i] = m+dif;
			dif = m-(di[i]-2*dif);
			dif = min(dif,LIM);
			dif = max(dif,-LIM);
		}
		if(dif > 0) {
			ed = m-1;
		} else if(dif < 0) {
			st = m+1;
		} else {
			poss = true;break;
		}
	}
	ll rus = 0;
	ll rube = 0;
	ll rup = 0;
	for(int i=0;i<n;i++) {
		rus += wb[i];
		rube += wa[i];
		rup += go[i];
		if(go[i] < 0) {
			poss = false;
		}
	}
	if((rus == 0) != (rube == 0)) {
		poss = false;
	}
	if(!poss) {
		cout << "No\n";
	} else {
			cout << "Yes\n";
	}
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |