Submission #871389

#TimeUsernameProblemLanguageResultExecution timeMemory
871389andrei_boacaPacking Biscuits (IOI20_biscuits)C++17
100 / 100
36 ms1568 KiB
#include "biscuits.h" #include <bits/stdc++.h> //#include "grader.cpp" using namespace std; typedef long long ll; ll f[65],ans,lg[65]; vector<ll> secv[65]; vector<ll> compress(vector<ll> a) { vector<ll> aux; ll L=0; for(auto i:a) { if(i<0) L+=abs(i); else { if(L!=0) aux.push_back(-L); aux.push_back(i); } } if(L!=0) aux.push_back(-L); return aux; } vector<ll> elim(vector<ll> a, ll nr) { ll init=nr; ll taken=0; while(nr>0) { ll p=a.back(); ll L=-1; if(p<0) L=abs(p); else L=(1LL<<p); if(L<=nr) { nr-=L; taken+=L; a.pop_back(); continue; } if(p<0) break; vector<ll> aux=elim(secv[p],nr); a.pop_back(); for(auto i:aux) a.push_back(i); break; } if(taken>0) a.push_back(-taken); //a=compress(a); return a; } long long count_tastiness(long long x, std::vector<long long> a) { for(int i=0;i<=60;i++) { f[i]=0; lg[i]=0; } for(int i=0;i<a.size();i++) f[i+1]=a[i]; lg[0]=1; ll suma=0; for(ll i=1;i<=60;i++) { lg[i]=0; suma+=(1LL<<(i-1))*f[i]; secv[i].clear(); secv[i]={i-1,i-1}; ll maxim=suma/x; ll dr=(1LL<<i)-1; if(maxim<dr) { ll out=dr-maxim; secv[i]=elim(secv[i],out); } ll mylg=0; for(auto j:secv[i]) { if(j>=0) { lg[i]+=lg[j]; mylg+=(1LL<<j); } else mylg+=abs(j); } //assert(mylg==(1LL<<i)); } return lg[60]; }

Compilation message (stderr)

biscuits.cpp: In function 'std::vector<long long int> elim(std::vector<long long int>, ll)':
biscuits.cpp:29:8: warning: unused variable 'init' [-Wunused-variable]
   29 |     ll init=nr;
      |        ^~~~
biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:66:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(int i=0;i<a.size();i++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...