Submission #1206014

#TimeUsernameProblemLanguageResultExecution timeMemory
1206014banganPacking Biscuits (IOI20_biscuits)C++20
0 / 100
1096 ms63296 KiB
#include "biscuits.h"
#include <bits/stdc++.h>

using i64 = long long;

long long count_tastiness(long long x, std::vector<long long> a) {
	for (int i = 0; i < a.size(); i++) {
		if (a[i] > x + 1 && i + 1 == a.size()) {
			a.push_back(0);
		}
		if (a[i] > x + 1) {
			i64 t = (a[i] - x) / 2;
			a[i] -= 2 * t;
			a[i + 1] += t;
		}
	}
	int k = a.size();

	std::map<std::pair<int, i64>, i64> save;

	auto f = [&](auto self, int i, i64 n) -> i64 {
		if (save.find(std::make_pair(i, n)) != save.end()) {
			return save[std::make_pair(i, n)];
		}

		i64 cur = n;
		if (i < k) {
			cur += a[i];
		}

		if (cur == 0) {
			return 1;
		}

		i64 res = self(self, i + 1, cur / 2);
		if (cur >= x) {
			res += self(self, i + 1, (cur - x) / 2);
		}
		return save[std::make_pair(i, n)] = res;
	};

	return f(f, 0, 0);
}

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