Submission #828311

#TimeUsernameProblemLanguageResultExecution timeMemory
828311errayPacking Biscuits (IOI20_biscuits)C++17
0 / 100
1 ms468 KiB
#include "biscuits.h"

#include <bits/stdc++.h>

using namespace std;

#ifdef DEBUG
  #include "/home/eagle/ioi20/d2/debug.h"
#else 
  #define debug(...) void(37)
#endif

long long count_tastiness(long long X, std::vector<long long> A) {
  int K = int(A.size());
  for (int i = 0; i < K - 1; ++i) {
    long long carry = max(0LL, (A[i] - X) / 2);
    A[i] -= 2 * carry;
    A[i + 1] += carry;
  }
  A.back() = min(A.back(), X);
  vector<long long> dp(K);
  long long prev = 1;
  for (int i = K - 1; i >= 0; --i) {
    if (A[i] >= X) {
      prev = prev * 2 + dp[i];
      continue;
    }
    long long need = (1LL << i) * X;
    debug(i, prev);
    for (int j = i; j >= 0; --j) {
      long long have = (1LL << j) * A[j];
      if (have >= need) {
        dp[j] += prev;
        have -= need;
        need = (1LL << j) * X;
        assert(have <= need);
        if (have == need) {
          break;
        }
      }
      need -= have;
    }
    prev += dp[i];
  }
  return prev;
}

#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...