Submission #1185815

#TimeUsernameProblemLanguageResultExecution timeMemory
1185815SwanPacking Biscuits (IOI20_biscuits)C++20
9 / 100
22 ms840 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <iostream> #include <vector> #include <stack> #include <algorithm> #include <string> #include <set> #include <map> #include <list> #include <time.h> #include <math.h> #include <random> #include <deque> #include <queue> #include <cassert> #include <climits> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <bitset> #include <sstream> #include <chrono> #include <cstring> #include <optional> //#define int long long #define INP freopen("subrev.in","r",stdin) #define OUTP freopen("subrev.out","w",stdout) using ld = long double; using LD = ld; using namespace std; map<int, int> g; long long x; bool isTwoPower(long long x) { long long mda = log2(x); long long val = (1ll << mda); if (val > x) val/=2; if (val < x) val*=2; return val == x; } long long getLargestPower(long long x) { if (x == 1) return 0; long long cur = 1; while((1ll << cur) < x) cur++; return cur - 1; } long long getSum(vector<long long>& v, int r) { long long ans = 0; int len = v.size() - 1; for (int i = 0; i <= min(len, r); i++) ans+=(1ll << i) * v[i]; return ans; } long long calcF(long long n, vector<long long>& v) { if (n == 0) return 1; if (n < 0) return 0; if (g.count(n)) return g[n]; long long res = 0; if (isTwoPower(n)) { long long sum = 0; for (int i = 0; i < v.size(); i++) { if ((1ll << i) <= n) sum+= v[i] * (1ll << i); } if (sum / n >= x) res++; res+=calcF(n - 1, v); g[n] = res; return res; } long long largestPower = getLargestPower(n); long long sum = getSum(v, largestPower); res = calcF((1ll << largestPower), v); if (sum / (1LL << largestPower) >= x) { res+=calcF(min(n, sum / x) - (1ll << largestPower), v); res--; } g[n] = res; return res; } long long count_tastiness(long long X, vector<long long> v) { g.clear(); x = X; return calcF(1LL << 61, v); } /* void solve() { cout << count_tastiness(3, {5, 2, 1}); cout << endl << g[3] << endl; } int main() { ios_base::sync_with_stdio(0); solve(); } */
#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...