Submission #303379

#TimeUsernameProblemLanguageResultExecution timeMemory
303379Namnamseo비스킷 담기 (IOI20_biscuits)C++17
77 / 100
1020 ms1272 KiB
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;

map<ll, ll> memo[100];
vector<ll> a;
ll k;
ll x;

ll F(int i, ll carry)
{
	if (i >= k) {
		return carry / x;
	}

	{
		auto ir = memo[i].lower_bound(carry);
		auto il = ir;
		if (il != memo[i].end() && il->first == carry) return il->second;
		if (il != memo[i].begin() && ir != memo[i].end()) {
			--il;
			if (il->second == ir->second) return il->second;
		}
	}

	ll &ret = memo[i][carry];

	ret = !!((a[i] + carry) / x);

	ret += F(i+1, (a[i] + carry) / 2);
	if (a[i] + carry >= x)
		ret += F(i+1, (a[i] + carry - x) / 2);

	return ret;
}

ll count_tastiness(ll x, vector<ll> a)
{
	::k = a.size();
	for(int i=0; i<64; ++i) memo[i].clear();
	::a = a;
	::x = x;
	return F(0, 0) + 1;
}
#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...