제출 #569802

#제출 시각아이디문제언어결과실행 시간메모리
569802StickfishPacking Biscuits (IOI20_biscuits)C++17
0 / 100
25 ms2856 KiB
#include "biscuits.h"
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
using ll = long long;

const ll INF = 1e18 + 177013;

const int MAXK = 61;
ll a[MAXK];
map<ll, ll> mp;

ll get_ans(ll mxsm) {
    if (mxsm < 0)
        return 0;
    if (mxsm == 0)
        return 1;
    int i = 0;
    while (1ll << (i + 1) <= mxsm)
        ++i;
    mxsm = min(mxsm, a[i]);
    if (i == 0)
        return 1 + int(mxsm > 0);
    if (mp.find(mxsm) != mp.end())
        return mp[mxsm];
    ll t = get_ans((1ll << i) - 1) + get_ans(mxsm - (1ll << i));
    mp[mxsm] = t;
    return t;
}

ll count_tastiness(ll x, vector<ll> a_) {
    int k = a_.size();
    for (int i = 0; i < MAXK; ++i)
        a[i] = 0;
    for (int i = 0; i < k; ++i)
        a[i] = a_[i];
    for (int i = 1; i < MAXK; ++i) {
        a[i] <<= i;
        a[i] += a[i - 1];
    }
    for (int i = 0; i < MAXK; ++i) {
        a[i] /= x;
    }
    return get_ans(a[MAXK - 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...