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