Submission #1261651

#TimeUsernameProblemLanguageResultExecution timeMemory
1261651avighnaFestival (IOI25_festival)C++20
5 / 100
61 ms10944 KiB
#include <bits/stdc++.h> struct item { int64_t i, p, t; }; std::vector<int> max_coupons(int A, std::vector<int> P, std::vector<int> T) { const int n = P.size(); std::vector<item> a(n); for (int i = 0; i < n; ++i) { a[i] = {i, P[i], T[i]}; } std::sort(a.begin(), a.end(), [&](item i, item j) { if (i.t != j.t) { return i.t > j.t; } return i.p < j.p; }); int _n = n; for (int i = 0; i < n; ++i) { if (a[i].t == 1) { _n = i; break; } } if (_n == 0) { std::vector<int> ans; int64_t cur = A; for (auto &i : a) { if (cur - i.p < 0) { break; } cur = (cur - i.p) * i.t; ans.push_back(i.i); } return ans; } std::vector<int64_t> psum(n); if (n != _n) { psum[_n] = a[_n].p; } for (int i = _n + 1; i < n; ++i) { psum[i] = psum[i - 1] + a[i].p; } const int64_t inf = 1e15; int max_ans = 0; int64_t cur = A; for (int j = 0; j <= _n; ++j) { int got = j + std::upper_bound(psum.begin(), psum.end(), cur) - psum.begin() - _n; if (got > max_ans) { max_ans = got; } if (cur - a[j].p < 0) { break; } cur = std::min(inf, (cur - a[j].p) * a[j].t); } std::vector<int> ans; for (int i = 0; i < max_ans; ++i) { ans.push_back(a[i].i); } return ans; }
#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...