Submission #1273664

#TimeUsernameProblemLanguageResultExecution timeMemory
1273664lucas110550Souvenirs (IOI25_souvenirs)C++20
22 / 100
1 ms388 KiB
#include "souvenirs.h" #include <vector> #include <utility> void buy_souvenirs(int N, long long P0) { // N = 3 in the official tests. // For completeness we also handle N = 1 and N = 2. if (N == 1) { // Need 0 souvenirs of type 0 → do nothing. return; } if (N == 2) { // Need exactly one souvenir of type 1. // A single transaction with M = P0 - 1 always buys type 1 // (and never type 0 because M < P0). long long M = P0 - 1; transaction(M); return; } // ----------- N == 3 --------------------------------- // First transaction: M = P0 - 1. // It always buys at least one souvenir of type 1. long long M0 = P0 - 1; auto first = transaction(M0); std::vector<int> L0 = first.first; // types bought in this transaction long long R0 = first.second; // coins returned // Does the first transaction already give us a souvenir of type 2 ? bool got_type2 = false; for (int t : L0) if (t == 2) { got_type2 = true; break; } if (got_type2) { // We have bought 1 of type 1 and 1 of type 2. // Need one more type 2. Compute P1 + P2. long long sum0 = M0 - R0; // = P1 + P2 long long M2 = sum0 / 2; // floor((P1+P2)/2) // M2 is < P1 and ≥ P2, therefore the seller will give us exactly one type 2. transaction(M2); // Now we have 1×type 1 and 2×type 2 → done. } else { // Only type 1 was bought. We need two type 2. // From the first transaction we already know P1. long long sum0 = M0 - R0; // = P1 long long P1 = sum0; long long Mtype2 = P1 - 1; // ≥ P2 and < P1 // Buy type 2 twice. transaction(Mtype2); transaction(Mtype2); // Now we have 1×type 1 and 2×type 2 → done. } }
#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...