Submission #782580

#TimeUsernameProblemLanguageResultExecution timeMemory
782580_martynasPacking Biscuits (IOI20_biscuits)C++14
100 / 100
26 ms1340 KiB
#include "biscuits.h"
#include <set>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <map>

using namespace std;

using ll = long long;

#warning change mxk to 60
const int mxk = 60;

unordered_map<ll, ll> memo;
ll solve(ll n, ll x, vector<ll> &pref) {
    if(n == 1) return 1;
    if(n <= 0) return 0;
    if(memo.count(n)) return memo[n];
    ll val = 0;
    int msb = 63-__builtin_clzll(n-1);
    val += solve(1LL<<msb, x, pref);
    val += solve(min(n, 1+pref[msb]/x)-(1LL<<msb), x, pref);
    memo[n] = val;
    return val;
}


ll count_tastiness(ll x, vector<ll> a) {
    memo.clear();
    vector<ll> pref(mxk);
    a.resize(mxk, 0);
    for(int i = 0; i < mxk; i++) {
        pref[i] = (1LL<<i)*a[i]+(i?pref[i-1]:0);
    }
    ll ans = solve(1LL<<mxk, x, pref);
	return ans;
}

Compilation message (stderr)

biscuits.cpp:12:2: warning: #warning change mxk to 60 [-Wcpp]
   12 | #warning change mxk to 60
      |  ^~~~~~~
#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...