Submission #1254312

#TimeUsernameProblemLanguageResultExecution timeMemory
1254312hectormedranoFestival (IOI25_festival)C++20
0 / 100
42 ms6584 KiB
#include "festival.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
	vector<int> R;
	int mx=0;
	int e=-1;
	vector<vector<pair<int, int>>> I(5);
	vector<vector<long long>> D(5);
	int N = P.size();
	for (int i = 0;i < N;i++) {
		I[T[i]].push_back({P[i], i});
	}
	for (int k = 1;k <= 4;k++) {
		sort(I[k].begin(), I[k].end());
		int S = I[k].size();
		D[k].resize(S+1, 0);
	}
	D[2][0] = A;
	for (int i = 1;i <= I[2].size();i++) {
		D[2][i] = (D[2][i - 1] - I[2][i-1].first) * 2;
	}
	for (int i = 1;i <= I[1].size();i++) {
		D[1][i] = D[1][i - 1] + I[1][i - 1].first;
	}
	for (int i = 0;i <= I[2].size();i++) {
		if (D[2][i] < 0) { break; }
		auto t = upper_bound(D[1].begin(), D[1].end(), D[2][i]);
		int c;
		if (t != D[1].end()){c = (t - D[1].begin());}
		else { c = I[1].size(); }
		if (mx < c + i) {
			mx = c + i;
			e = i;
		}
	}
	for (int i = 0;i < e;i++) {
		R.push_back(I[2][i].second);
	}
	auto t = upper_bound(D[1].begin(), D[1].end(), D[2][e]);
	int c;
	if (t != D[1].end()) { c = (t - D[1].begin()); }
	else { c = I[1].size(); }
	for (int i = 0;i < c;i++) {
		R.push_back(I[1][i].second);
	}
	return R;
}
#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...