Submission #659862

#TimeUsernameProblemLanguageResultExecution timeMemory
659862Savu_Stefan_CatalinRemittance (JOI19_remittance)C++14
55 / 100
1069 ms32412 KiB
#include <iostream> #include <algorithm> using namespace std; long long e[1005005],i,ok1,ok2,a[1005005],b[1005005],n,d[1005005],pp[1001],f[1000005],p,es[1000005],ppp[1001]; void make() { long long t=0,i; for (i=1;(i<=e[0]||t)&&i<=1005004;++i) { e[i]+=t; t=0; if (e[i]>=0) {t=e[i]/1048576; e[i]%=1048576;} else {t=(e[i]-1048575)/1048576; e[i]=(e[i]%1048576+1048576)%1048576;} } e[0]=i-1; if (i>1005000) e[0]=1,e[1]=-1; else while (e[e[0]]==0&&e[0]!=0) e[0]--; } int main() { ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); cin>>n; ppp[0]=1; for (i=1;i<=20;++i) ppp[i]=2*ppp[i-1]; for (i=1;i<=n;++i) { cin>>a[i]; if (a[i]!=0) ok1=1; cin>>b[i]; if (b[i]!=0) ok2=1; d[i]=a[i]-b[i]; e[(i-1)/20+1]+=d[i]*ppp[(i-1)%20]; es[(i-1)/20+1]+=ppp[(i-1)%20]; } e[0]=es[0]=(n-1)/20+1; if (!ok1&&!ok2) {cout<<"Yes"; return 0;} else if (!ok2) {cout<<"No"; return 0;} make(); while (true) { if (e[0]==0) { break;} if (e[e[0]]<0) {cout<<"No"; return 0;} if (e[1]%2==0) {pp[++pp[0]]=0; for (i=1;i<=e[0];++i) {e[i]/=2; e[i]+=ppp[19]*(e[i+1]%2);} while (e[e[0]]==0&&e[0]!=0) e[0]--;} else { pp[++pp[0]]=1; for (i=1;i<=es[0];++i) e[i]-=es[i]; e[0]=max(e[0],es[0]); make(); } } reverse(pp+1,pp+pp[0]+1); for (i=1;i<=pp[0];++i) { if (pp[i]==0) p*=2; else p++; } f[n]=p; for (i=n;i>=2;--i) { f[i-1]=f[i]*2-d[i]; if (f[i-1]<0) {cout<<"No"; return 0;} } cout<<"Yes"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...