제출 #1280736

#제출 시각아이디문제언어결과실행 시간메모리
1280736SabaKharebava축제 (IOI25_festival)C++20
100 / 100
77 ms9656 KiB
#include"festival.h" #include<bits/stdc++.h> using namespace std; #define pb push_back const long long mx = 1e17; vector<int> cur, best; int best_type1; void solve(int pos, long long tokens, int lim, vector<int> &a, vector<pair<long long, int>> &b, vector<int> &p, vector<int> &t) { if (lim == 1 or pos == a.size()) { int it = lower_bound(b.begin(), b.end(), make_pair(tokens+1, -1)) - b.begin(); if (it + cur.size() > best.size() + best_type1) { best = cur; best_type1 = it; } return; } if (tokens >= p[a[pos]] and lim >= t[a[pos]]) { cur.pb(a[pos]); solve(pos + 1, min((tokens - p[a[pos]]) * t[a[pos]], mx), lim, a, b, p, t); cur.pop_back(); } solve(pos + 1, tokens, min(lim, t[a[pos]]-1), a, b, p, t); } vector<int> max_coupons(int A, vector<int> p, vector<int> t) { vector<int> a; vector<pair<long long, int>> b; for (int i = 0; i < p.size(); i++) { if (t[i] == 1) b.pb({p[i], i}); else a.pb(i); } sort(a.begin(), a.end(), [&](int a, int b) { if (t[a] == t[b]) return p[a] < p[b]; return 1ll * p[a] * t[a] * (t[b] - 1) < 1ll * p[b] * t[b] * (t[a] - 1); }); sort(b.begin(), b.end()); for (int i = 1; i < b.size(); i++) b[i].first += b[i-1].first; vector<int> res; long long cur = A; for (int e : a) { if ((cur-p[e]) * t[e] > cur) { cur = min(mx, (cur-p[e]) * t[e]); res.pb(e); } else break; } a.erase(a.begin(), a.begin() + res.size()); solve(0, cur, 4, a, b, p, t); for (int e : best) res.pb(e); for (int i = 0; i < best_type1; i++) res.pb(b[i].second); return res; }
#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...