제출 #1251753

#제출 시각아이디문제언어결과실행 시간메모리
1251753Zicrus축제 (IOI25_festival)C++20
5 / 100
63 ms8380 KiB
#include <bits/stdc++.h>
#include "festival.h"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
#define all(v) v.begin(), v.end()
constexpr ll inf = 1ll << 62ll;
mt19937 mt(34056237);
ll _ = 0;

vector<int> max_coupons(int A, vector<int> price, vector<int> type) {
	ll n = price.size();
	vector<priority_queue<pll>> coups(4+1);
	for (ll i = 0; i < n; i++) {
		coups[type[i]].push({-price[i], i});
	}

	vector<int> res;
	while (true) {
		ll best = -1;
		ll r1 = -1;
		if (coups[1].size()) r1 = (A + coups[1].top().first) * 1;
		ll r2 = -1;
		if (coups[2].size()) r2 = (A + coups[2].top().first) * 2;
		ll r3 = -1;
		if (coups[3].size()) r3 = (A + coups[3].top().first) * 3;
		ll r4 = -1;
		if (coups[4].size()) r4 = (A + coups[4].top().first) * 4;
		best = max({r1, r2, r3, r4});
		if (best < 0) break;
		if (r1 == best) {
			res.push_back(coups[1].top().second);
			coups[1].pop();
			A = r1;
			continue;
		}
		if (r2 == best) {
			res.push_back(coups[2].top().second);
			coups[2].pop();
			A = r2;
			continue;
		}
		if (r3 == best) {
			res.push_back(coups[3].top().second);
			coups[3].pop();
			A = r3;
			continue;
		}
		if (r4 == best) {
			res.push_back(coups[4].top().second);
			coups[4].pop();
			A = r4;
			continue;
		}
	}
	return res;
}

#ifdef TEST
#include "grader.cpp"
#endif
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...