#include "festival.h"
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define ff first
#define ss second
bool com(pii a,pii b)
{
if (a.ss==b.ss)
return a.ff<b.ff;
return (a.ff*a.ss*(b.ss-1))<(b.ff*b.ss*(a.ss-1));
}
vector<int> max_coupons(int a, vector<int> P, vector<int> T)
{
map<pair<int,int>,vector<int>>inds;
int n=P.size();
ll A=a;
vector<pii>vals;
for (int i=0;i<n;i++)
{
inds[{P[i],T[i]}].push_back(i);
vals.push_back({P[i],T[i]});
}
sort(begin(vals),end(vals),com);
reverse(begin(vals),end(vals));
// exit(-1);
vector<pii>tk=vals;
// cerr<<1<<endl;
// while (vals.size())
// {
// pii z=vals.back();
// if ((A-z.ff)*z.ss>=A)
// {
// tk.push_back(z);
// A=(A-z.ff)*z.ss;
// A=min(A,(ll)1e18);
// vals.pop_back();
// continue;
// }
// break;
// }
// // cerr<<2<<endl;
// vector<ll>pr[5]={};
// while (vals.size())
// {
// pr[vals.back().ss].push_back(vals.back().ff);
// vals.pop_back();
// }
// for (int i=2;i<=4;i++)
// {
// ll cur=A;
// vector<ll>vld;
// sort(begin(pr[i]),end(pr[i]));
// for (auto j:pr[i])
// {
// if (j>cur)
// break;
// cur=(cur-j)*i;
// vld.push_back(j);
// }
// pr[i]=vld;
// }
// int s2=pr[2].size(),s3=pr[3].size(),s4=pr[4].size();
// s2=min(s2,33);
// s3=min(s3,33);
// s4=min(s4,34);
// ll dp[s2+1][s3+1][s4+1]={};
// for (int i=0;i<=s2;i++)
// for (int j=0;j<=s3;j++)
// for (int k=0;k<=s4;k++)
// dp[i][j][k]=-1;
// vector<ll>pre={0};
// for (auto i:pr[1])
// pre.push_back(pre.back()+i);
// dp[0][0][0]=A;
// int mx=0;
// vector<int>ind={0,0,0};
// for (int i=0;i<=s2;i++)
// for (int j=0;j<=s3;j++)
// for (int k=0;k<=s4;k++)
// {
// if (i>0)
// {
// if (pr[2][i-1]<=dp[i-1][j][k])
// dp[i][j][k]=max(dp[i][j][k],(dp[i-1][j][k]-pr[2][i-1])*2ll);
// }
// if (j>0)
// {
// if (pr[3][j-1]<=dp[i][j-1][k])
// dp[i][j][k]=max(dp[i][j][k],(dp[i][j-1][k]-pr[3][j-1])*3ll);
// }
// if (k>0)
// {
// if (pr[4][k-1]<=dp[i][j][k-1])
// dp[i][j][k]=max(dp[i][j][k],(dp[i][j][k-1]-pr[4][k-1])*4ll);
// }
// if (dp[i][j][k]>=0)
// {
// ll z=upper_bound(begin(pre),end(pre),dp[i][j][k])-begin(pre);
// if (i+j+k+z-1>mx)
// {
// mx=i+j+k+z-1;
// ind={i,j,k};
// }
// }
// }
// int i=ind[0],j=ind[1],k=ind[2];
// int rem=mx-i-j-k;
// vector<pii>tl;
// while (max(i,max(j,k))>0)
// {
// if (i>0&&dp[i][j][k]==(dp[i-1][j][k]-pr[2][i-1])*2ll)
// {
// tl.push_back({pr[2][i-1],2});
// i--;
// }
// if (j>0&&dp[i][j][k]==(dp[i][j-1][k]-pr[3][j-1])*3ll)
// {
// tl.push_back({pr[3][j-1],3});
// j--;
// }
// if (k>0&&dp[i][j][k]==(dp[i][j][k-1]-pr[4][k-1])*4ll)
// {
// tl.push_back({pr[4][k-1],4});
// k--;
// }
// }
// reverse(begin(tl),end(tl));
// for (int l=0;l<rem;l++)
// tl.push_back({pr[1][l],1});
// for (auto i:tl)
// tk.push_back(i);
vector<int>ans;
for (auto i:tk)
{
ans.push_back(inds[i].back());
inds[i].pop_back();
}
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |