Submission #829095

# Submission time Handle Problem Language Result Execution time Memory
829095 2023-08-18T03:59:20 Z definitelynotmee Packing Biscuits (IOI20_biscuits) C++17
9 / 100
1000 ms 724 KB
#include "biscuits.h"
//#include"grader.cpp"
#include<bits/stdc++.h>
#define ff first
#define ss second
#define all(x) x.begin(), x.end()
using namespace std;
using ll = long long;
using pii = pair<int,int>;

vector<ll> ct, v, ub;

ll solve(int id, ll carry, ll x){
	if(id == -1)
		return 1;
	if(ub[id] < carry)
		return 1;
	
	ll minus = min(v[id], carry);
	carry-=minus;
	ll ret = solve(id-1,carry*2,x);
	// cerr << id << ' ' << carry << ' ' << x << endl;
	// cerr << "->" << carry+x << ' ' << ct[id] << ' ' << minus << endl;
	if(carry+x <= ct[id]-minus)
		ret += solve(id-1, (max(0ll, x+carry+minus-v[id]))*2, x);
	return ret;
}

bool solvetest(int id, ll carry, ll x){
	if(id == -1)
		return false;
	
	ll minus = min(v[id], carry);
	carry-=minus;
	ll ret = solve(id-1,carry*2,x);
	if(carry+x <= ct[id]-minus)
		return true;
	return ret;
}

void bsearch(int id, ll x){
	ll ini = -1, fim = 1000000000000000000;
	// cerr << id << ' ' <<fim << endl;
	while(ini!=fim){
		// cerr << ini << ' ' << fim << '\n';
		ll m = (ini+fim+1)>>1;
		if(solvetest(id,m,x))
			ini = m;
		else fim = m-1;
	}
	ub[id] = ini;
}

long long count_tastiness(long long x, std::vector<long long> a) {
	a.resize(60,0);
	ct = v = a;
	int k = a.size();

	for(int i = 1; i < k; i++){
		ct[i]+=ct[i-1]/2;
	}
	ub.resize(60);

	for(int i = 0; i < k; i++)
		bsearch(i,x);

	return solve(k-1,0,x);
}

# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 2 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 3 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Execution timed out 1077 ms 212 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1076 ms 212 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 416 ms 352 KB Output is correct
2 Execution timed out 1081 ms 724 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 2 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 3 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Execution timed out 1077 ms 212 KB Time limit exceeded
17 Halted 0 ms 0 KB -