Submission #1067119

#TimeUsernameProblemLanguageResultExecution timeMemory
1067119n1kPacking Biscuits (IOI20_biscuits)C++17
100 / 100
51 ms1116 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
	
using namespace std;
using ll = long long;
	
const int K = 61;

ll X;
vector<ll> sum(K);
map<ll, ll> mem;
	
ll fast(ll t){
	if(mem.count(t)) return mem[t];
	if(t==1) return 1;
	if(t<=0) return 0;
	ll msb = 63 - __builtin_clzll(t);
	if((1ll<<msb)==t) msb--;
	return mem[t]=fast(1ll<<msb) + fast(min(t, sum[msb]/X+1)-(1ll<<msb));
}
	
long long count_tastiness(long long x, std::vector<long long> a) {
	sum.assign(K+5, 0);
	mem.clear();
	X = x;
	for(int i=0; i<K; i++){
		if(i<a.size()) sum[i]+=(1ll<<i)*a[i];
		sum[i+1]+=sum[i];
	}
	return fast(1ll<<K);
}
	
/*
1
4 1
0 0 0 0
*/

Compilation message (stderr)

biscuits.cpp: In function 'long long int count_tastiness(long long int, std::vector<long long int>)':
biscuits.cpp:27:7: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |   if(i<a.size()) sum[i]+=(1ll<<i)*a[i];
      |      ~^~~~~~~~~
#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...