Submission #1249791

#TimeUsernameProblemLanguageResultExecution timeMemory
1249791thabumiSouvenirs (IOI25_souvenirs)C++20
25 / 100
11 ms412 KiB
#ifdef EVAL #include "souvenirs.h" #endif #include <bits/stdc++.h> using namespace std; #ifndef EVAL pair<vector<int>, long long> transaction(long long M); #endif void buy_souvenirs(int N, long long P0) { if (N == 2) { transaction(P0 - 1); return; } if (N == 3) { auto [v, x] = transaction(P0 - 1); if (v.size() == 2) { long long sum = P0 - 1 - x; transaction(sum / 2); } else { long long P1 = P0 - 1 - x; transaction(P1 - 1); transaction(P1 - 1); } return; } pair<vector<int>, long long> ans; // int cur = 1; // int cnt = 0; // long long cur_q = P0 - 1; // while (true) { // ans = transaction(cur_q); // if (!(ans.second == 0 && ans.first.size() == 1 && ans.first[0] == cur)) { // break; // } // cnt++; // if (cnt == cur) { // cur++; // cnt = 0; // cur_q--; // if (cur == N) { // return; // } // } // } vector<long long> price(N); price[0] = P0; bool found_last = false; int cnt_last = 0; for (int i = 1; i < N - 1; i++) { ans = transaction(price[i - 1] - 1); if (ans.first.size() == 2) { price[N - 1] = 1; cnt_last++; price[i] = price[i - 1] - 2; } else { if (ans.second == 0) { price[i] = price[i - 1] - 1; } else { price[i] = price[i - 1] - 2; } } for (int j = 2; j <= i; j++) { transaction(price[i]); } } if (found_last) { for (int i = cnt_last + 1; i < N; i++) { transaction(1); } } else { for (int i = 1; i < N; i++) { transaction(price[N - 2] - 1); } } } #ifndef EVAL pair<vector<int>, long long> transaction(long long M) { return {{}, M}; } #endif
#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...