Submission #1342364

#TimeUsernameProblemLanguageResultExecution timeMemory
1342364aritro_Festival (IOI25_festival)C++20
0 / 100
39 ms5716 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

vector<int> max_coupons(int s,vector<int>p,vector<int>t){
    int money=s;
    vector<pair<int,int>> mul1,mul2;
    int n=p.size();
    for(int i=0;i<n;i++){
        if(t[i]==1) mul1.pb({p[i],i});
        if(t[i]==2) mul2.pb({p[i],i});
    }
    vector<int> ans;
    sort(all(mul1));
    sort(all(mul2));
    int i=0,j=0;
    for(;i<mul1.size()||j<mul2.size();){
        if(i==mul1.size()||money<mul1[i].ff){
            //can only buy type 2
            if(money<mul2[j].ff) break;
            money-=mul2[j].ff;
            money*=2;
            ans.pb(mul2[j].ss);
            j++;
            continue;
        }
        if(j==mul2.size()||money<mul2[j].ff){
            //can only buy type 1
            if(money<mul1[i].ff) break;
            money-=mul1[i].ff;
            ans.pb(mul1[i].ss);
            i++;
            continue;
        }
        int op1=money-mul1[i].ff;
        int op2=money-mul2[j].ff;
        op2*=2;
        if(op1>op2){
            money=op1;
            ans.pb(mul1[i].ss);
            i++;
        }else{
            money=op2;
            ans.pb(mul2[j].ss);
            j++;
        }
    }
    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...