# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1251483 | vietbachleonkroos2326 | Festival (IOI25_festival) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> res;
void solvesub1(int &A, vector<int> &P, vector<int> &T) {
vector<pair<int, int>> vec;
for (int i = 0; i < n; i++) {
vec.push_back({P[i], i});
}
sort(vec.begin(), vec.end());
for (int i = 0; i < n; i++) {
if (A >= vec[i].first) {
A -= vec[i].first;
res.push_back(vec[i].second);
} else {
break;
}
}
}
void solvesub2(int &A, vector<int> &P, vector<int> &T) {
vector<int> v1,v2;
for(int i=0;i<n;i++){
if(t[i]==1)v1.push_back(i);
else v2.push_back(i);
}
sort(v1.begin(), v1.end(), [&](int a, int b) {
return P[a] < P[b];
});
sort(v2.begin(), v2.end(), [&](int a, int b) {
return P[a] < P[b];
});
for(int i:v2){
if(A>=P[i]){
res.push_back(i);
A=(A-P[i])*2;
}
}
for(int i:v1){
if(A>=P[i]){
res.push_back(i);
A=(A-P[i]);
}
}
}
void solvesub3(int &A, vector<int> &P, vector<int> &T) {
}
vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
n = T.size();
res.clear();
bool checksub1 = true;
bool checksub2 = true;
for (int i = 0; i < n; i++) {
if (T[i] != 1) checksub1 = false;
if (T[i] > 2) checksub2 = false;
}
if (checksub1) solvesub1(A, P, T);
else if (checksub2) solvesub2(A, P, T);
else solvesub3(A, P, T);
return res;
}