Submission #1259336

#TimeUsernameProblemLanguageResultExecution timeMemory
1259336ducthanh2306Festival (IOI25_festival)C++20
5 / 100
57 ms6840 KiB
#include <bits/stdc++.h> using namespace std; vector<int> max_coupons(int A, vector<int> P, vector<int> T) { using ll = long long; const ll CLAMP = (1LL<<62); // cap to avoid overflow int N = (int)P.size(); // Group coupons by type vector<pair<int,int>> by[5]; for (int i = 0; i < N; ++i) { by[T[i]].push_back({P[i], i}); } // Sort each group ascending by price for (int t = 1; t <= 4; ++t) sort(by[t].begin(), by[t].end()); // Current tokens ll X = A; vector<int> ans; // Pointers to cheapest not-yet-used coupon of each multiplier type size_t p2 = 0, p3 = 0, p4 = 0; // Phase 1: Buy multipliers greedily by cheapest affordable while (true) { int chosenType = 0; int chosenIdx = -1; int chosenPrice = 0; // Among available coupons, choose the cheapest affordable one int minPrice = INT_MAX; if (p2 < by[2].size() && by[2][p2].first <= X && by[2][p2].first < minPrice) { minPrice = by[2][p2].first; chosenType = 2; chosenPrice = by[2][p2].first; chosenIdx = by[2][p2].second; } if (p3 < by[3].size() && by[3][p3].first <= X && by[3][p3].first < minPrice) { minPrice = by[3][p3].first; chosenType = 3; chosenPrice = by[3][p3].first; chosenIdx = by[3][p3].second; } if (p4 < by[4].size() && by[4][p4].first <= X && by[4][p4].first < minPrice) { minPrice = by[4][p4].first; chosenType = 4; chosenPrice = by[4][p4].first; chosenIdx = by[4][p4].second; } if (chosenType == 0) break; // none affordable // Buy it ans.push_back(chosenIdx); __int128 nxt = (__int128)(X - chosenPrice) * chosenType; if (nxt > CLAMP) X = CLAMP; else X = (ll)nxt; if (chosenType == 2) ++p2; else if (chosenType == 3) ++p3; else ++p4; } // Phase 2: Spend remaining tokens on T=1 cheapest-first sort(by[1].begin(), by[1].end()); for (auto &c : by[1]) { if (c.first <= X) { X -= c.first; ans.push_back(c.second); } else break; } 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...