Submission #1280938

#TimeUsernameProblemLanguageResultExecution timeMemory
1280938LaMatematica14Packing Biscuits (IOI20_biscuits)C++20
0 / 100
1 ms572 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
using namespace std;

long long count_tastiness(long long x, vector<long long> a) {
	int k = a.size();
	vector<long long> ep(k);
	long long sum = 0;
	for (long long i = 0; i < k; i++) {
		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 point+1;
		}
		if (m.count({point, lev})) return m[{point, lev}];
		long long agg = 0;
		long long mprev = (1LL<<(lev-1))-1;
		if (point >= mprev) agg += ric(mprev, lev-1);
		long long nex = min(point, ep[lev-1]); // check
		agg += ric(nex&mprev, lev-1);
		m.insert({{point, lev}, agg});
		return agg;
	};

	return ric((1<<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...