Submission #378229

#TimeUsernameProblemLanguageResultExecution timeMemory
378229ThistlePacking Biscuits (IOI20_biscuits)C++14
0 / 100
17 ms364 KiB
#include "biscuits.h" #include <vector> #include<iostream> #include<algorithm> #include<unordered_map> #include<map> using namespace std; using ll=long long; using H=pair<ll, ll>; using vi=vector<ll>; #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++) #define rep(i,n) rng((i),(0),(n)) #define pb push_back #define vec vector #define all(a) (a).begin(),(a).end() #define fs first #define sc second #define siz(a) ll((a).size()) long long count_tastiness(long long x, std::vector<long long> a) { ll k=siz(a); a.resize(60); rng(i,k,60) a[i]=0; unordered_map<ll, ll>mp[61]; //remain cookie -> able number //i no jiten de no atai ga t ika dattara j made tobashimasu //i+1 ha t ijou no atai nara soko ni iku keishiki ni narimasu vec<vi> num(60),val(60); rep(i,60){ ll sum=0,mn=1e18; rng(j,i+1,60){ sum>>=1; sum+=a[j]; if(sum>=x){ num[i].pb(mn); val[i].pb(j); mn=-1; break; } else{ //(x-sum)<(j-i) ga over flow shitara dame if(((mn+(1<<(j-i))+1)>>(j-i))>=(x-sum)) continue; ll t=(x-sum)<<(j-i); if(mn>t){ num[i].pb(mn); val[i].pb(j); mn=t-1; } } } if(mn>=0){ num[i].pb(mn); val[i].pb(60); } } rep(i,60) { reverse(all(num[i])); reverse(all(val[i])); } mp[0][0]=1; rep(i,60){ auto& now=mp[i]; auto& nxt=mp[(i+1)]; for(auto g:now){ ll t=g.fs; t+=a[i]; int r=val[i][lower_bound(all(num[i]),t)-num[i].begin()]; mp[r][t>>(r-i)]+=g.sc; t-=x; if(t>=0){ r=val[i][lower_bound(all(num[i]),t)-num[i].begin()]; mp[r][t>>(r-i)]+=g.sc; } } } ll ans=0; for(auto g:mp[60]){ ans+=g.sc; } return ans; }

Compilation message (stderr)

biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:11:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   11 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
biscuits.cpp:25:2: note: in expansion of macro 'rng'
   25 |  rng(i,k,60) a[i]=0;
      |  ^~~
biscuits.cpp:11:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   11 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
biscuits.cpp:12:18: note: in expansion of macro 'rng'
   12 | #define rep(i,n) rng((i),(0),(n))
      |                  ^~~
biscuits.cpp:32:2: note: in expansion of macro 'rep'
   32 |  rep(i,60){
      |  ^~~
biscuits.cpp:11:28: warning: unnecessary parentheses in declaration of 'j' [-Wparentheses]
   11 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
biscuits.cpp:34:3: note: in expansion of macro 'rng'
   34 |   rng(j,i+1,60){
      |   ^~~
biscuits.cpp:11:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   11 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
biscuits.cpp:12:18: note: in expansion of macro 'rng'
   12 | #define rep(i,n) rng((i),(0),(n))
      |                  ^~~
biscuits.cpp:60:2: note: in expansion of macro 'rep'
   60 |  rep(i,60) {
      |  ^~~
biscuits.cpp:11:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   11 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
biscuits.cpp:12:18: note: in expansion of macro 'rng'
   12 | #define rep(i,n) rng((i),(0),(n))
      |                  ^~~
biscuits.cpp:66:2: note: in expansion of macro 'rep'
   66 |  rep(i,60){
      |  ^~~
biscuits.cpp:68:9: warning: unused variable 'nxt' [-Wunused-variable]
   68 |   auto& nxt=mp[(i+1)];
      |         ^~~
#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...