Submission #1313225

#TimeUsernameProblemLanguageResultExecution timeMemory
1313225BigBadBullyPacking Biscuits (IOI20_biscuits)C++20
100 / 100
9 ms824 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
#define ll long long
#define pii pair<ll,ll>
#define ff first
#define ss second
using namespace std;
ll count_tastiness(ll x, vector<ll> a) {
    auto v = a;    
	while(v.size()<62)
		v.push_back(0);
    for (ll i = 0; i < 62; i++)
	{
		ll ol = v[i];
		if (v[i]>x)
			v[i] = x+(v[i]-x)%2,v[i+1]+=(ol-v[i])/2;
	}
	ll sum = 0;
	vector<ll> dp(63,0);
	dp[0] = 1;
	vector<ll> rb(63,-1);
	for(ll i = 1; i <= 62; i++)
	{
		sum+=v[i-1]*(1ll<<i-1);
		ll rbv = -1;
		if(__int128(x)*__int128((1ll<<i-1))<2e18)
		{
			rbv = (sum-x*(1ll<<i-1))/x;
			if(sum<x*(1ll<<i-1))
				rbv = -1;
		}
		
		rbv = min(rbv,(1ll<<i-1)-1);
		rb[i] = rbv;
		
		for(int bit = 61;bit >= 0;bit--)
			if((rbv+1)&(1ll<<bit))
				dp[i]+=dp[bit],rbv-=(1ll<<bit),rbv=min(rbv,rb[bit+1]);
		dp[i]+=dp[i-1];
	}
	return dp[61];
}
#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...