Submission #1203855

#TimeUsernameProblemLanguageResultExecution timeMemory
1203855LucaLucaMPacking Biscuits (IOI20_biscuits)C++20
9 / 100
15 ms912 KiB
#include "biscuits.h" #include <iostream> #include <vector> #include <algorithm> #include <cassert> #include <map> #define debug(x) #x << " = " << x << '\n' using ll = long long; using i128 = __int128; ll count_tastiness(ll X, std::vector<ll> a) { while ((int) a.size() < 63) { a.push_back(0); } std::vector<ll> sum(63, 0); sum[0] = a[0]; for (int i = 1; i < 63; i++) { sum[i] = sum[i - 1]; sum[i] += (i128) (1 << i) * a[i]; } std::map<i128, i128> memo; auto calc = [&](auto &&self, ll n) { if (memo.count(n)) { return memo[n]; } if (n <= 0) { return (i128) 0; } ll b = std::__lg(n - 1); return memo[n] = self(self, (1LL << b)) + self(self, std::min(n, 1 + sum[b] / X) - (1LL << b)); }; memo[1] = 1; return calc(calc, 8e18); } /* daca X <= 1e4 ce fac? ma uit la primii 15 biti sau cv daca incepand cu al 20lea bit iau ceva != 0 => */
#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...