#include "festival.h"
#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;
const long long oo = 1LL << 60;
vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
vector<pair<int, int>> a[4];
int n = size(P);
for (int i = 0; i < n; i++)
a[T[i] - 1].push_back({P[i], i});
for (int i = 0; i < 4; i++)
sort(begin(a[i]), end(a[i]));
vector<long long> sum1 = {0};
for (auto [x, _] : a[0])
sum1.push_back(sum1.back() + x);
vector<int> cur(4), fixed;
long long has = A;
while (1)
{
int found = 0;
for (int t = 1; t < 4; t++)
if (cur[t] < size(a[t]))
{
auto [p, id] = a[t][cur[t]];
long long after = min((has - p) * (t + 1), oo);
if (after >= has)
{
has = after;
cur[t]++;
fixed.push_back(id);
found = 1;
break;
}
}
if (!found)
break;
}
auto get1 = [&](long long has)
{
return upper_bound(begin(sum1), end(sum1), has) - begin(sum1) - 1;
};
vector<int> ans = {0, int(size(fixed))};
auto updateAns = [&]()
{
int cnt0 = get1(has);
int totalCur = cnt0 + int(size(fixed));
int totalAns = ans[0] + ans[1];
if (totalCur > totalAns)
ans = {cnt0, int(size(fixed))};
};
while (1)
{
updateAns();
long long best = -1;
int bestT = -1;
for (int t = 1; t < 4; t++)
if (cur[t] < size(a[t]))
{
auto [p, _] = a[t][cur[t]];
long long after = (has - p) * (t + 1);
if (after > best)
{
best = after;
bestT = t;
}
}
if (bestT < 0)
break;
has = best;
fixed.push_back(a[bestT][cur[bestT]++].second);
}
vector<int> coupons;
for (int i = 0; i < ans[1]; i++)
coupons.push_back(fixed[i]);
for (int i = 0; i < ans[0]; i++)
coupons.push_back(a[0][i].second);
return coupons;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |