제출 #1321827

#제출 시각아이디문제언어결과실행 시간메모리
1321827Ludissey축제 (IOI25_festival)C++20
0 / 100
42 ms8220 KiB
#include "festival.h" #include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<vector<vector<vector<int>>>> dp; vector<vector<vector<vector<pair<int,int>>>>> prv; int n; vector<vector<pair<int,int>>> v(4); const int MAX_VAL=1e11; std::vector<signed> max_coupons(signed A, std::vector<signed> P, std::vector<signed> T) { v.resize(4); n=sz(P); for (int i = 0; i < n; i++) v[T[i]-1].push_back({P[i],i}); for (int i = 0; i < 4; i++) sort(all(v[i])); vector<int> pref(sz(v[0])); for (int i = 0; i < sz(v[0]); i++) { pref[i]=v[0][i].first; if(i>0) pref[i]+=pref[i-1]; } int mxI=0; int mx=0; int a=A; for (int i = 0; i <= sz(v[1]); i++) { if(a<0) break; int up=upper_bound(all(pref), a)-pref.begin(); if(i+up>mx){ mx=i+up; mxI=i; } a=(a-v[1][i].first)*2; } a=A; vector<signed> outp; for (int i = 0; i < mxI; i++) { outp.push_back(v[1][i].second); a=(a-v[1][i].first)*2; } for (int i = 0; i < sz(v[0]); i++) { if(a<v[0][i].first) break; outp.push_back(v[0][i].second); a-=v[0][i].first; } return outp; }
#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...