Submission #569785

#TimeUsernameProblemLanguageResultExecution timeMemory
569785StickfishPacking Biscuits (IOI20_biscuits)C++17
0 / 100
1082 ms49084 KiB
#include "biscuits.h"
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
using ll = long long;

const ll INF = 1e18 + 177013;
const ll BORDER = 3e12 + 134;

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

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

ll count_tastiness(ll x, vector<ll> a_) {
    int k = a_.size();
    for (int i = 0; i < k; ++i)
        a[i] = a_[i];
    for (int i = 1; i < 60; ++i) {
        a[i] <<= i;
        a[i] += a[i - 1];
    }
    for (int i = 0; i < k; ++i) {
        a[i] /= x;
    }
    return get_ans(a[59], 59);
}

#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...