Submission #1283006

#TimeUsernameProblemLanguageResultExecution timeMemory
1283006nika7878Festival (IOI25_festival)C++20
51 / 100
77 ms9780 KiB
#include "festival.h"
#include<bits/stdc++.h>
#define ll long long

using namespace std;
const ll INF = 1e18;

vector<int> cur, best;
int best1;

void solve(int pos, ll tok, int type, vector<int> &a, vector<pair<ll, int> > &b, vector<int> &p, vector<int> &t) {

    if(type==1 || pos==a.size()) 
    {
        auto it=lower_bound(b.begin(), b.end(), make_pair(tok+1, -1))-b.begin();
        if (it+cur.size()>best.size()+best1) 
        {
            best=cur;
            best1=it;
        }
        return ;
    }
    if(tok>=p[a[pos]] && type>=t[a[pos]]) {
        cur.push_back(a[pos]);
        solve(pos+1, min((tok-p[a[pos]])*t[a[pos]], INF), type, a, b, p, t);
        cur.pop_back();
    }
    solve(pos + 1, tok, min(type, t[a[pos]] - 1), a, b, p, t);
}

vector<int> max_coupons(int A, vector<int> p, vector<int> t) {
    vector<int> a;
    vector<pair<ll, int>> b;
    int n=p.size();
    for(int i=0; i<n; i++)
        t[i]!=1 ? a.push_back(i) : b.push_back({p[i], i});

    sort(a.begin(), a.end(), [&](int i, int j) 
    {
        if(t[i]==t[j]) 
            return p[i]<p[j];
        else
            return p[i]*t[i]*(t[j]-1) < p[j]*t[j]*(t[i]-1);
    });
    sort(b.begin(), b.end());

    for(int i=1; i<b.size(); i++)
        b[i].first+=b[i-1].first;

    vector<int> res;
    ll tok = A;

    for(auto i: a) 
    {
        if ((tok-p[i])*t[i]>=tok) 
        {
            tok=(tok-p[i])*t[i];
            tok=min(tok, (long long)1e15);
            res.push_back(i);
        } else
            break;
    }

    a.erase(a.begin(), a.begin()+(int)res.size());

    solve(0, tok, 4, a, b, p, t);

    for(auto i: best)
        res.push_back(i);

    for(int i = 0; i < best1; i++) {
        res.push_back(b[i].second);
    }
    return res;
}
#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...