제출 #1272174

#제출 시각아이디문제언어결과실행 시간메모리
1272174nxteru축제 (IOI25_festival)C++20
100 / 100
898 ms25000 KiB
#include "festival.h" #include <bits/stdc++.h> using namespace std; using ll=long long; #define INF 1000000000000000000LL #define LOG 70 struct Node { ll p,t,idx; bool operator<(const Node &b) const { if(t==1&&b.t==1)return p<b.p; return p*t*(b.t-1)<b.p*b.t*(t-1); } }; vector<int> max_coupons(int A, vector<int> P, vector<int> T) { vector<Node> v; for(int i=0;i<P.size();i++) v.push_back({P[i],T[i],i} ); sort(v.begin(),v.end()); vector<int> ans; ll a=A; vector<Node>b[4]; for(auto &x:v) { if(a*(x.t-1)<x.p*x.t){ if(x.t==1||b[x.t-1].size()<LOG)b[x.t-1].push_back(x); }else{ ans.push_back(x.idx); a=(a-x.p)*x.t; if(a>INF){ ans.clear(); for(auto &y:v)ans.push_back(y.idx); return ans; } } } vector<ll>s; for(auto &x:b[0]){ if(s.size()==0)s.push_back(x.p); else s.push_back(s.back()+x.p); } ll ma=-1,si[4]={-1,-1,-1,-1}; for(int i=0;i<=b[3].size();i++){ for(int j=0;j<=b[2].size();j++){ for(int k=0;k<=b[1].size();k++){ ll aa=a; vector<Node>c; for(int l=0;l<i;l++)c.push_back(b[3][l]); for(int l=0;l<j;l++)c.push_back(b[2][l]); for(int l=0;l<k;l++)c.push_back(b[1][l]); sort(c.begin(),c.end()); bool f=true; for(auto &x:c){ if(aa>=x.p){ aa=(aa-x.p)*x.t; }else f=false; } if(f){ ll cnt=upper_bound(s.begin(),s.end(),aa)-s.begin(); if(ma<cnt+i+j+k){ ma=cnt+i+j+k; si[0]=cnt,si[1]=k;si[2]=j;si[3]=i; } } } } } if(ma==-1)return ans; vector<Node>tmp; for(int i=0;i<4;i++){ for(int j=0;j<si[i];j++)tmp.push_back(b[i][j]); } sort(tmp.begin(),tmp.end()); for(auto &x:tmp)ans.push_back(x.idx); 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...