Submission #1253306

#TimeUsernameProblemLanguageResultExecution timeMemory
1253306flashmtFestival (IOI25_festival)C++20
32 / 100
182 ms8120 KiB
#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) { auto comp = [&](int u, int v) { long long costUV = 1LL * P[u] * T[u] * T[v] + 1LL * P[v] * T[v]; long long costVU = 1LL * P[v] * T[v] * T[u] + 1LL * P[u] * T[u]; return costUV < costVU; }; auto buy = [&](vector<int> &ids) { sort(begin(ids), end(ids), comp); long long has = A; for (int i : ids) { has = min((has - P[i]) * T[i], oo); if (has < 0) return has; } return has; }; 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); // check if we can buy everything vector<int> ids(n); iota(begin(ids), end(ids), 0); if (buy(ids) >= 0) return ids; int best = -1; vector<int> ans; for (int i = 0; i <= min(int(size(a[1])), 65); i++) for (int j = 0; j <= min(int(size(a[2])), 45); j++) for (int k = 0; k <= min(int(size(a[3])), 35); k++) { vector<int> ids; for (int u = 0; u < i; u++) ids.push_back(a[1][u].second); for (int u = 0; u < j; u++) ids.push_back(a[2][u].second); for (int u = 0; u < k; u++) ids.push_back(a[3][u].second); long long has = buy(ids); int u = upper_bound(begin(sum1), end(sum1), has) - begin(sum1) - 1; int sz = size(ids); if (u + sz > best) { best = u + sz; ans = ids; for (int q = 0; q < u; q++) ans.push_back(a[0][q].second); } } 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...