Submission #1250249

#TimeUsernameProblemLanguageResultExecution timeMemory
1250249gptopenai선물 (IOI25_souvenirs)C++20
0 / 100
11 ms400 KiB
#include "souvenirs.h" #include <vector> #include <algorithm> // We know P[0] = P0. We will fill in P[1..N-1] by binary search, // then for each i = 1..N-1 we call transaction(P[i]) exactly i times // to buy i souvenirs of type i. void buy_souvenirs(int N, long long P0) { std::vector<long long> P(N); P[0] = P0; // 1) Learn P[1..N-1]: // For each i = 1..N-1, binary search P[i] in [1, P[i-1]-1]. for (int i = 1; i < N; i++) { long long lo = 1, hi = P[i-1] - 1; while (lo < hi) { long long mid = (lo + hi) / 2; // mid < P[i-1] ≤ P0, so it's a valid M: 1 ≤ mid < P0 auto res = transaction(mid); const auto &bought = res.first; // Did we buy type i? bool got_i = std::binary_search(bought.begin(), bought.end(), i); if (got_i) { // mid >= P[i], so P[i] ≤ mid hi = mid; } else { // mid < P[i] lo = mid + 1; } } P[i] = lo; } // 2) Now that we know all P[i], just buy exactly i of type i: // calling transaction(P[i]) will buy exactly one of type i // (and none cheaper, since after subtracting P[i] the remainder // is zero), so repeat i times. for (int i = 1; i < N; i++) { for (int cnt = 0; cnt < i; cnt++) { transaction(P[i]); } } }
#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...