제출 #1282969

#제출 시각아이디문제언어결과실행 시간메모리
1282969tschav_축제 (IOI25_festival)C++20
0 / 100
54 ms9580 KiB
#include <bits/stdc++.h> #define dbg(x) cerr << #x << " -> " << x << "\n" using namespace std; using ll = long long; using pii = pair<int,int>; struct ticket { int p; int t; int idx; }; vector<int> max_coupons(int A, vector<int> P, vector<int> T) { int n = P.size(); vector<ticket> arr1; vector<pii> arr2; for(int i = 0; i < n; ++i){ ticket t; t.p = P[i]; t.t = T[i]; t.idx = i; if(T[i] == 2) arr1.push_back(t); else arr2.push_back(pii{t.p,i}); } sort(arr1.begin(),arr1.end(),[&](auto a, auto b) { return (-a.p*a.t*b.t - b.p*b.t < -b.p*b.t*a.t - a.p*a.t); }); int m = arr1.size(); int k = arr2.size(); sort(arr2.begin(),arr2.end()); ll curr = A; vector<int> R; vector<int> pref(k,0); pref[0] = arr2[0].first; for(int i = 1; i < k; ++i){ pref[i] = pref[i-1] + arr2[i].first; } int cnt = 0; int L,Rt; for(int i = -1; i < m; ++i){ if(i == -1){ int l = -1; int r = k-1; while(r - l > 0){ int m = (l+r)/2; if(r - l == 1) { if(pref[r] > curr) { break; }else l=r; break; } int H = 0; if(m >= 0) H = pref[m]; if(H > curr) { r = m-1; } else l = m; } cnt = l+1; L=-1; Rt=l; continue; } curr -= arr1[i].p; curr *= arr1[i].t; if(curr < 0) break; if(curr > 2e14) curr = 2e14; int l = -1; int r = k-1; while(r - l > 0){ int m = (l+r)/2; if(r - l == 1) { if(pref[r] > curr) { break; }else l=r; break; } int H = 0; if(m >= 0) H = pref[m]; if(H > curr) { r = m-1; } else l = m; } if(l+1+i+1 > cnt) { L=i; Rt=l; cnt = l+1+i+1; } } for(int i = 0; i <= L;++i){ R.emplace_back(arr1[i].idx); } for(int j = 0; j <= Rt;++j){ R.emplace_back(arr2[j].second); } return R; } // int main() { // vector<int> R; // R = max_coupons(9, vector<int>{1,1,1,1}, vector<int>{1,2,2,2}); // for(auto &i : R) cout << i << " "; // }
#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...