Submission #677920

#TimeUsernameProblemLanguageResultExecution timeMemory
677920qwerasdfzxclRemittance (JOI19_remittance)C++17
55 / 100
534 ms28168 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; constexpr int INF = 1e9+100; int n; void NO(){ printf("No\n"); exit(0); } int s[2002000]; void add(ll x, int p){ for (int i=0;i<60;i++) if (x&(1LL<<i)){ s[p+i]++; } for (int i=p;;i++){ if (s[i] > 1){ s[i+1] += s[i]/2; s[i] %= 2; } else if (i-p > 60) break; } //for (int i=100;i>=0;i--) printf("%d", s[i]); //printf("\n"); } ll getq(vector<int> a, vector<int> b){ for (int i=0;i<n;i++){ ll x = (ll)a[i] - b[i] + INF; add(x, i); } ll tmp = 0; for (int j=0;j<40;j++){ //printf("%d -> %d\n", j+n, s[j+n]); if (s[j+n]) tmp |= 1LL<<j; } //printf("%lld\n", tmp); add(tmp+1, 0); //printf("ok\n"); for (int i=0;i<n;i++) if (s[i]) return -1; //printf("ok\n"); return tmp+1 - INF; } void naive(vector<int> a, vector<int> b){ ll q; for (int i=0;i<n;i++){ if (!i){ ll aS = 0, bS = 0; for (int j=0;j<n;j++){ aS += (ll)a[j] * (1LL<<j); bS += (ll)b[j] * (1LL<<j); } if (aS!=0 && bS==0) NO(); if (aS < bS) NO(); if ((aS - bS) % ((1LL<<n)-1) != 0) NO(); q = (aS-bS) / ((1LL<<n)-1); } else q = (q+a[i-1]-b[i-1])/2; if (q<0) NO(); //rotate(a.begin(), a.begin()+1, a.end()); //rotate(b.begin(), b.begin()+1, b.end()); } printf("Yes\n"); exit(0); } int main(){ scanf("%d", &n); vector<int> a, b; int bb = 0; for (int i=0;i<n;i++){ int x, y; scanf("%d %d", &x, &y); a.push_back(x); b.push_back(y); bb |= y; } if (n<=40) naive(a, b); if (bb==0) NO(); ll q; for (int i=0;i<n;i++){ if (!i){ q = getq(a, b); if (q==-1) NO(); } else q = (q+a[i-1]-b[i-1])/2; //printf("%lld\n", q); if (q<0) NO(); //rotate(a.begin(), a.begin()+1, a.end()); //rotate(b.begin(), b.begin()+1, b.end()); } printf("Yes\n"); return 0; }

Compilation message (stderr)

remittance.cpp: In function 'int main()':
remittance.cpp:82:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   82 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
remittance.cpp:87:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         scanf("%d %d", &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...