| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1290287 | stapanulocu1 | 축제 (IOI25_festival) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
struct te {
long long p, poz;
};
vector<te> p[5];
int c[5];
long long a;
vector<int> r;
bool solve6(vector<int> &P,
vector<int> &T) {
for(int i = 0; i < P.size(); ++i) {
if(a < ((a - 1LL * P[i]) * (1LL * T[i]))) {
return false;
}
}
return false;
}
vector<int> max_coupons(int A, vector<int> P,
vector<int> T) {
r.clear();
for(int i =0; i < 5; ++i) {
p[i].clear();
c[i] = 0;
}
for(int i = 0; i < P.size(); ++i) {
te st;
st.p = P[i];
st.poz = i;
p[T[i]].push_back(st);
}
for(int i = 1; i <= 4; ++i) {
sort(p[i].begin(), p[i].end(), [](const te& a, const te& b) {
return a.p < b.p;
});
}
a = A;
if(solve6(P, T)) {
return r;
}
while(1) {
long long maxN = 0;
long long rezz = -1, nr = 0;
for(long long i = 1; i <= 4; ++i) {
if(c[i] < p[i].size() && a >= p[i][c[i]].p && ((a - p[i][c[i]].p)*i) > maxN) {
rezz = p[i][c[i]].poz;
maxN = (a - p[i][c[i]].p) * i;
nr = i;
if(maxN > a)
break;
}
}
if(rezz == -1) {
break;
}
c[nr]++;
a = min(maxN, N * 1000000000);
r.push_back(rezz);
if(r.size() == P.size())
break;
}
return r;
}
/*
int main() {
vector<int> aa = {4, 500, 8, 14}, bb = {1, 3, 3, 4};
vector<int> rez = max_coupons(13,aa, bb);
for(int i =0; i< rez.size(); ++i) {
cerr<< rez[i] << " ";
}
return 0;
}*/
