Submission #1280956

#TimeUsernameProblemLanguageResultExecution timeMemory
1280956LaMatematica14Packing Biscuits (IOI20_biscuits)C++20
100 / 100
74 ms976 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
using namespace std;

long long count_tastiness(long long x, vector<long long> a) {
	int k = 62;
	vector<long long> ep(k);
	long long sum = 0;
	for (long long i = 0; i < k; i++) {
		if (i < a.size()) sum += a[i]*(1LL<<i);
		ep[i] = min((1LL<<(i+1))-1, sum/x);
	}

	map<pair<long long, int>, long long> m;
	function<long long(long long, int)> ric = [&](long long point, int lev) {
		if (lev == 1) {
			return min(ep[0], point)+1;
		}
		if (m.count({point, lev})) return m[{point, lev}];
		long long agg = 0;
		long long mprev = (1LL<<(lev-1))-1;
		agg += ric(min(point, mprev), lev-1);
		long long nex = min(point, ep[lev-1])-mprev-1; // check
		if (nex >= 0) agg += ric(nex, lev-1);
		m.insert({{point, lev}, agg});
		return agg;
	};

	return ric((1LL<<k)-1, k);
}

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