Submission #610811

#TimeUsernameProblemLanguageResultExecution timeMemory
610811czhang2718Remittance (JOI19_remittance)C++17
100 / 100
375 ms43932 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; #define int ll const int N=1e6+1, mod=1e9+7; int n; ll a[N], b[N], c[N]; ll t[N]; ll pw[N]; ll bpow(ll a, ll b){ if(b==0) return 1; ll x=bpow(a,b/2); x=(x*x)%mod; if(b&1) x=(x*a)%mod; return x; } signed main(){ cin.tie(0)->sync_with_stdio(0); cin >> n; pw[0]=1; for(int i=0; i<n; i++){ cin >> a[i] >> b[i]; c[i]=b[i]-a[i]; pw[i+1]=(pw[i]*2)%mod; } for(int i=n-1; i>=0; i--){ t[0]+=pw[(i-1+n)%n]*(c[i]+mod)%mod; t[0]%=mod; } // cout << t[0] << "\n"; t[0]=(mod-t[0])%mod; t[0]=(t[0]*(mod+bpow(mod+pw[n]-1, mod-2)))%mod; // cout << t[0] << "\n"; for(int i=n-1; i>0; i--){ t[i]=2*t[(i+1)%n]+c[(i+1)%n]; if(t[i]<0){ cout << "No"; return 0; } } for(int it=0; it<30; it++){ for(int i=0; i<n; i++){ int take=min(t[i], a[i]/2); t[i]-=take; a[i]-=2*take; a[(i+1)%n]+=take; } } for(int i=0; i<n; i++){ if(t[i] || 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...