제출 #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...