Submission #1292856

#TimeUsernameProblemLanguageResultExecution timeMemory
1292856ChuanChenPacking Biscuits (IOI20_biscuits)C++20
0 / 100
1096 ms960 KiB
#include "biscuits.h"
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

//retorna qtd de y, t.q. podemos ter x pacotes somado y cada
ll count_tastiness(ll x, vector<ll> a) {
	ll MAXA = 0;
	for(int k = a.size()-1; k >= 0; k--){
		MAXA += a[k]*(1<<k);
	}


	if(x > MAXA) return 1ll;
	
	ll ans = 1;
	for(int y = 1; y <= MAXA/x; y++){
		vector<ll> a_copy = a;
		priority_queue<int> pq; //tera x sacola de valor y
		
		for(int i = 1; i <= x; i++) pq.push(y);
		//cerr << "ysiz: " << pq.size() << endl;
		//retira sempre do maior bag pra encher
		for(int k = a_copy.size()-1; k >= 0; k--){
			if(a_copy[k] == 0) continue;
			if(pq.empty()) break;
			int no = pq.top();
			pq.pop();
			//cerr << "k: " << k << endl;
			if((1<<k) <= no){
				a_copy[k] --;
				//cerr << "usei " << (1<<k) << " para preencher " << no << endl;
				no -= (1<<k);
			}
			else{
				pq.push(no);
				continue;
			}
			if(no>0) pq.push(no);
			if(a_copy[k] != 0) k++; 
		}
		
		if(pq.empty()){
			ans++;
		}
	}
	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...