Submission #1240451

#TimeUsernameProblemLanguageResultExecution timeMemory
1240451Ghulam_JunaidPacking Biscuits (IOI20_biscuits)C++20
47 / 100
194 ms54256 KiB
#include <bits/stdc++.h> #include "biscuits.h" // #include "grader.cpp" using namespace std; typedef long long ll; map<vector<ll>, ll> memo; vector<ll> nvec; ll x; ll f(vector<ll> vec){ if (memo.find(vec) != memo.end()) return memo[vec]; ll sz = vec.size(); if (sz == 0) return memo[vec] = 1; nvec = vec; if (vec.back() >= x){ nvec.pop_back(); return memo[vec] = 2 * f(nvec); } nvec.pop_back(); ll tmp = f(nvec); if ((1ll << (sz - 1)) > (1e18 + x) / (x - vec.back())) return memo[vec] = tmp; nvec = vec; nvec.pop_back(); ll cur = (x - vec.back()) * (1ll << (sz - 1)); for (ll i = sz - 2; i >= 0; i --){ if (cur >= (1ll << i) and nvec[i]){ ll quo = min(nvec[i], cur / (1ll << i)); nvec[i] -= quo; cur -= quo * (1ll << i); } } if (cur == 0) return memo[vec] = tmp + f(nvec); return memo[vec] = tmp; } ll count_tastiness(ll X, vector<ll> a){ x = X; ll k = a.size(); ll ans = 1; while (a.size() < 60) a.push_back(0); for (ll i = 0; i + 1 < a.size(); i ++){ if (a[i] < 2 * x + 1) continue; ll del = (a[i] - x) / 2; a[i] -= 2 * del; a[i + 1] += del; } return f(a); }
#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...