제출 #1320105

#제출 시각아이디문제언어결과실행 시간메모리
1320105nicolo_010비스킷 담기 (IOI20_biscuits)C++20
56 / 100
20 ms936 KiB
#include <bits/stdc++.h>
#include "biscuits.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int mX = 1e5+5;

map<ll, ll> memo;

ll x;
vector<ll> a;
vector<ll> s;

ll f(ll n) {
	if (n<=0) return 0;
	if (n==1) return 1;
	if (memo.count(n)) return memo[n];
	ll i = __lg(n-1);
	ll caso1 = f((1ll)<<(i));
	ll caso2 = f(min(n, 1+(s[i]/x))-((1ll)<<i));
	return memo[n] = caso1+caso2;
}

const ll INF = 1e18+5;

ll count_tastiness(ll X, vector<ll> A) {
	x = X, a = A;
	int k = a.size();
	s.assign(k, 0);
	s[0] = a[0];
	for (int i=1; i<k; i++) {
		s[i] = s[i-1] + a[i]*((1ll)<<i);
	}
	while (s.size()<61) s.push_back(s.back());
	ll ans = f(INF);
	memo.clear();
	return ans;
}
#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...