제출 #1331971

#제출 시각아이디문제언어결과실행 시간메모리
1331971boclobanchatRemittance (JOI19_remittance)C++20
0 / 100
0 ms348 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+67;
int A[MAXN],B[MAXN],C[MAXN];
int main()
{
    ios::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];
	for(int i=1;i<=n+36;i++)
	{
		C[i]+=A[i]-B[i];
		if(C[i]<0) C[i+1]-=(-C[i]+1)/2,C[i]+=(-C[i]+1)/2*2;
		C[i+1]+=C[i]/2,C[i]%=2;
	}
	if(C[n+37]<0) return cout<<"No",0;
	long long sum=0;
	for(int a=1;a<=30;a++) if(C[a])
	{
		sum+=(1LL<<(a-1));
		for(int i=a;i<=n+36;i++)
		{
			if(i<a+n) C[i]--;
			if(C[i]<0) C[i+1]-=(-C[i]+1)/2,C[i]+=(-C[i]+1)/2*2;
			C[i+1]+=C[i]/2,C[i]%=2;
		}
	}
	bool cc=true;
	for(int i=1;i<=n+37;i++) cc&=(!C[i]);
	if(!cc) return cout<<"No",0;
	A[n]-=sum*2,A[1]+=sum;
	for(int i=1;i<=n;i++)
	{
		if(A[i]<B[i]||A[i]%2!=B[i]%2) return cout<<"No",0;
		A[i+1]+=(A[i]-B[i])/2,A[i]-=(A[i]-B[i]);
	}
	if(A[n+1]) return cout<<"No",0;
	cout<<"Yes";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...