Submission #1269311

#TimeUsernameProblemLanguageResultExecution timeMemory
1269311sula2Festival (IOI25_festival)C++20
24 / 100
51 ms7476 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> max_coupons(int a, vector<int> p, vector<int> t) {
    int n = p.size();
    vector<int> ind[3];
    for (int i = 0; i < n; i++) {
        ind[t[i]].push_back(i);
    }
    for (int i = 1; i <= 2; i++) 
        sort(ind[i].begin(), ind[i].end(), [&](int x, int y) { return p[x] < p[y]; });
    vector<long long> pr{ 0 };
    for (int i : ind[1])
        pr.push_back(pr.back() + p[i]);
    long long tokens = a;
    int ptr = pr.size() - 1;
    while (pr[ptr] > tokens) ptr--;
    int c1 = ptr, c2 = 0, j = 0;
    for (int i : ind[2]) {
        tokens = min((long long)1e18, (tokens - p[i])*t[i]);
        if (tokens < 0) break;
        while (pr[ptr] > tokens) ptr--;
        while (ptr+1 < pr.size() && pr[ptr+1] <= tokens) ptr++;
        j++;
        if (j + ptr > c1 + c2) {
            c1 = ptr;
            c2 = j;
        }
    }
    vector<int> ans;
    for (int i = 0; i < c2; i++)
        ans.push_back(ind[2][i]);
    for (int i = 0; i < c1; i++)
        ans.push_back(ind[1][i]);
    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...