Submission #1253539

#TimeUsernameProblemLanguageResultExecution timeMemory
1253539alex_2008Souvenirs (IOI25_souvenirs)C++20
7 / 100
12 ms412 KiB
#include <bits/stdc++.h> using namespace std; // Provided by the grader extern pair<vector<int>, long long> transaction(long long M); void buy_souvenirs(int N, long long P0) { vector<long long> P(N, -1); vector<long long> cnt(N, 0); P[0] = P0; auto buy = [&](long long M, vector<int>& got, long long& change){ auto res = transaction(M); got = res.first; change = res.second; }; // 1) Buy type 1 and deduce P1 { vector<int> L; long long R; buy(P0 - 1, L, R); // must buy type 1 P[1] = (P0 - 1) - R; cnt[1] += 1; } // 2) For i=2..N-1, call M = P[i-1]-1 to buy (and learn) type i for (int i = 2; i < N; ++i) { if (P[i] != -1) continue; // might already be set by an edge case vector<int> L; long long R; long long M = P[i-1] - 1; buy(M, L, R); // L is either {i} or {i, i+1} in the only possible double-buy edge case if (!L.empty() && L[0] == i) { cnt[i] += 1; if (L.size() == 2 && L[1] == i+1) { // leftover==1 and P[i+1]==1 P[i] = (M - R) - 1; P[i+1] = 1; cnt[i+1] += 1; } else { P[i] = (M - R); } } else { // Should not happen under subtask-3 constraints; keep safe fallback // If we ever land here, we could binary-search with valid Ms, // but spec guarantees our M is >= P[i] and < P[i-1]. // (Omitted for subtask-3, by design.) } } // 3) Top-up: for each i>=1, reach exactly i items using M = P[i] for (int i = 1; i < N; ++i) { while (cnt[i] < i) { vector<int> L; long long R; buy(P[i], L, R); // spends exactly P[i], buys exactly type i cnt[i] += 1; } } }
#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...