Submission #1251505

#TimeUsernameProblemLanguageResultExecution timeMemory
1251505vietbachleonkroos2326Festival (IOI25_festival)C++20
32 / 100
76 ms6076 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using int128 = __int128;

vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
    int N = P.size();
    vector<int> v1, v2;
    const int128 BIG = int128(1e18) * 1e18; 
    
    
    for (int i = 0; i < N; ++i) {
        (T[i] == 1 ? v1 : v2).push_back(i);
    }
    
    
    sort(v2.begin(), v2.end(), [&](int a, int b) {
        return int128(P[a]) * T[a] * (T[b] - 1) < int128(P[b]) * T[b] * (T[a] - 1);
    });
    
    
    sort(v1.begin(), v1.end(), [&](int a, int b) {
        return P[a] < P[b];
    });
    
    int128 tokens = A;
    vector<int> result;
    
    
    for (int i : v2) {
        if (tokens >= int128(P[i])) {
            tokens = min((tokens - int128(P[i])) * T[i], BIG);
            result.push_back(i);
        }
    }
    
   
    for (int i : v1) {
        if (tokens >= int128(P[i])) {
            tokens -= int128(P[i]);
            result.push_back(i);
        }
    }
    
    return result;
}
#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...