Submission #1019231

#TimeUsernameProblemLanguageResultExecution timeMemory
1019231j_vdd16Packing Biscuits (IOI20_biscuits)C++17
9 / 100
1073 ms1070912 KiB
#include <algorithm> #include <bitset> #include <cstdint> #include <cstring> #include <iostream> #include <limits.h> #include <math.h> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #define int long long #define ll long long #define loop(X, N) for(int X = 0; X < (N); X++) #define all(V) V.begin(), V.end() #define rall(V) V.rbegin(), V.rend() using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vector<ii>> vvii; typedef vector<bool> vb; typedef vector<vector<bool>> vvb; int count_tastiness(int x, vi a) { constexpr int N = 61; while (a.size() < N) a.push_back(0); vi pref(N, 0); pref[0] = a[0]; for (int i = 1; i < N; i++) pref[i] = pref[i - 1] / 2 + a[i]; int sum = 0; loop(i, N) sum += a[i] * (1LL << i); int result = sum + 1; vi sub(sum + 1, 0); vb isValid(sum + 1, true); for (int bit = N - 1; bit >= 0; bit--) { for (int y = 0; y <= sum; y++) { if (!isValid[y]) continue; sub[y] *= 2; int count = pref[bit] - sub[y]; if ((y & (1LL << bit)) == 0) { sub[y] = max(0LL, sub[y] - a[bit]); continue; } if (count < x) { result--; isValid[y] = false; continue; } sub[y] += x; sub[y] = max(0LL, sub[y] - a[bit]); } } return result; }
#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...