Submission #1252345

#TimeUsernameProblemLanguageResultExecution timeMemory
1252345flashmt축제 (IOI25_festival)C++20
51 / 100
77 ms8248 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) { vector<pair<int, int>> a[5]; int n = size(P); for (int i = 0; i < n; i++) a[T[i]].push_back({P[i], i}); for (int i = 1; i <= 4; i++) sort(begin(a[i]), end(a[i])); vector<long long> sum1 = {0}; for (auto [x, _] : a[1]) sum1.push_back(sum1.back() + x); int maxT = *max_element(begin(T), end(T)); if (maxT <= 2) { int best = -1; vector<int> buy; long long has = A; for (int i = 0; i <= int(size(a[2])); i++) { int u = upper_bound(begin(sum1), end(sum1), has) - begin(sum1) - 1; if (u + i > best) { best = u + i; buy = {u, i}; } if (i == int(size(a[2]))) break; auto [x, _] = a[2][i]; if (has < x) break; has = min((has - x) * 2, oo); } vector<int> ans; for (int i = size(buy) - 1; i >= 0; i--) for (int j = 0; j < buy[i]; j++) ans.push_back(a[i + 1][j].second); return ans; } // sub 5 vector<int> ids(n); iota(begin(ids), end(ids), 0); sort(begin(ids), end(ids), [&](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; }); return ids; }
#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...