Submission #1269590

#TimeUsernameProblemLanguageResultExecution timeMemory
1269590biankPacking Biscuits (IOI20_biscuits)C++20
100 / 100
47 ms840 KiB
#include "biscuits.h"
#include <bits/stdc++.h>

using namespace std;

#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)

#define all(x) begin(x), end(x)
#define sz(x) int(x.size())

#define pb push_back
#define eb emplace_back

using ll = long long;

const int K = 60;

ll s[K], X;
map<ll, ll> memo;

ll dp(ll n) {
    if (n <= 1) return n == 1;
    if (memo.count(n)) return memo[n];
    int i = 63 - __builtin_clzll(n - 1);
    return memo[n] = dp(1LL << i) + dp(min(n, s[i] / X + 1) - (1LL << i));
}

ll count_tastiness(ll x, vector<ll> a) {
    /*forn(i, sz(a)) if (a[i] - x >= 2) {
        ll extra = (a[i] - x) / 2;
        assert(extra >= 1);
        a[i] -= 2 * extra;
        if (i + 1 == sz(a)) a.pb(0LL);
        a[i + 1] += extra;
    }*/
    a.resize(K, 0);
    forn(i, K) s[i] = a[i] << i;
    forn(i, K - 1) s[i + 1] += s[i];
    X = x, memo.clear();
    return dp(1LL << K);
}

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