Submission #776089

#TimeUsernameProblemLanguageResultExecution timeMemory
776089boris_mihovPacking Biscuits (IOI20_biscuits)C++17
0 / 100
1 ms340 KiB
#include "biscuits.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> #include <map> typedef long long llong; const int MAXN = 64; const llong INF = 1e18; struct Key { int bit; llong max; friend bool operator < (const Key &a, const Key &b) { return a.bit < b.bit || (a.bit == b.bit && a.max < b.max); } }; int n; llong x; llong a[MAXN]; llong s[MAXN]; std::map <Key, llong> mem; llong f(int bit, llong max) { if (max < 0) { return 0; } if (bit == -1) { return 1; } if (mem.count({bit, max})) { return mem[{bit, max}]; } mem[{bit, max}] = f(bit - 1, std::min(max, s[bit])); mem[{bit, max}] += f(bit - 1, std::min(max, s[bit]) - (1LL << bit)); return mem[{bit, max}]; } llong count_tastiness(llong X, std::vector <llong> A) { n = A.size(); x = X; for (int i = 0 ; i < n ; ++i) { a[i] = A[i]; s[i] = a[i] * (1LL << i); if (i > 0) s[i] += s[i - 1]; } for (int i = 0 ; i < n ; ++i) { s[i] /= x; } mem.clear(); return f(n - 1, INF); }
#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...