제출 #161396

#제출 시각아이디문제언어결과실행 시간메모리
161396nvmdava송금 (JOI19_remittance)C++17
15 / 100
3 ms380 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define N 1000002
#define INF 0x3f3f3f3f3f3f3f3f
#define MOD 1000000007LL

ll d[N], a[N], b[N], c[N];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin>>n;
    for(int i = 1; i <= n; i++){
    	cin>>a[i]>>b[i];
    	c[i] = a[i] - b[i];
    }
    

    for(int j = 0; j < 50; j++){
    	for(int i = 1; i <= n; i++){
    		if(c[i] % 2 != 0){
    			d[i - 1] += 1LL << j;
    		}
    	}
 	   	d[n] = d[0];
    	for(int i = 1; i <= n; i++){
    		if(d[i] & (1LL << j)){
    			c[i] -= 2;
    			if(i == n)
    				c[1]++;
    			else
	    			++c[i + 1];
    		}
    	}
    	for(int i = 1; i <= n; i++){
    		c[i] /= 2;
    	}
    }

    for(int i = 1; i <= n; i++){
    	if(d[i] && a[i] > 1){
    		int k = min(d[i], a[i] / 2);
    		d[i] -= k;
    		a[i] -= k * 2;
    		if(i != n)
    			a[i + 1] += k;
    		else 
    			a[1] += k;
    	}
    }
    for(int i = 1; i <= n; i++){
    	if(d[i] && a[i] > 1){
    		int k = min(d[i], a[i] / 2);
    		d[i] -= k;
    		a[i] -= k * 2;
    		if(i != n)
    			a[i + 1] += k;
    		else 
    			a[1] += k;
    	}
    }
    for(int i = 1; i <= n; i++){
    	if(a[i] != b[i]){
    		cout<<"No";
    		return 0;
    	}
    }
    cout<<"Yes";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...