제출 #1145568

#제출 시각아이디문제언어결과실행 시간메모리
1145568hirayuu_oj송금 (JOI19_remittance)C++20
0 / 100
0 ms328 KiB
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(ll i=0; i<(n); i++) #define rrep(i,n) for(ll i=(n)-1; i>=0; i--) #define rng(i,l,r) for(ll i=(l); i<(r); i++) #define all(x) x.begin(),x.end() #define fi first #define se second using ll=long long; int main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int N;cin>>N; vector<pair<ll,ll>> money(N); rep(i,N)cin>>money[i].fi>>money[i].se; vector<ll> num(N+60,0); rep(i,N){ ll p=money[(i+1)%N].fi-money[(i+1)%N].se; num[i]+=p; } rep(i,N+59){ ll carry=num[i]/2; if(num[i]<0)carry=-((-num[i]+1)/2); num[i]-=carry*2; num[i+1]+=carry; } ll send=0; rrep(x,61){ if(num[N+x-1]==1){ send+=1LL<<x; rep(j,N){ num[x+j]--; } } rep(i,N+59){ ll carry=num[i]/2; if(num[i]<0)carry=-((-num[i]+1)/2); num[i]-=carry*2; num[i+1]+=carry; } } rep(i,N+60){ if(num[i]!=0){ cout<<"No\n"; return 0; } } vector<ll> sends(N); sends[0]=send; rng(i,1,N){ if((money[i].fi-money[i].se+sends[i-1])<0){ cout<<"No\n"; return 0; } if((money[i].fi-money[i].se+sends[i-1])%2==1){ cout<<"No\n"; return 0; } sends[i]=(money[i].fi-money[i].se+sends[i-1])/2; } rep(i,N){ if(money[i].fi+sends[(i+N-1)%N]-sends[i]*2!=money[i].se){ assert(false); cout<<"No\n";return 0; } } rep(i,70){ rep(j,N){ ll mx=min(money[j].fi/2,sends[j]); sends[j]-=mx; money[j].fi-=mx*2; money[(j+1)%N].fi+=mx; } } bool flg=false; rep(i,N){ if(sends[i]==0)flg=true; } if(flg)cout<<"Yes\n"; else cout<<"No\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...