Submission #1249827

#TimeUsernameProblemLanguageResultExecution timeMemory
1249827_abaatarSouvenirs (IOI25_souvenirs)C++20
21 / 100
12 ms412 KiB
#include "souvenirs.h" #include <utility> #include <vector> #include <cassert> #include <algorithm> #include <numeric> #include <iostream> #include <cstring> using namespace std; const int Ma = 5e2+10; using ll = long long; int sold[111]; void buy_souvenirs(int N, long long P0) { if (N == 3) { for (int i = 1; i < N; i++) sold[i] = i; ll hi = P0 - 1; for (int i = 1; i < N; i++) { if (sold[i] > 0) { auto res = transaction(hi); for (auto x: res.first) { sold[x]--; } } hi = (hi - 1) >> 1; } return; } for (int i = 1; i < N; i++) sold[i] = i; ll cur = P0 - 1; bool hasOne = false; for (int i = 1; i < N; i++) { if (i == N - 1 && hasOne == true) { while (sold[N - 1]-- > 0) transaction(1); return; } auto res = transaction(cur); sold[i]--; if (res.second == 1) { // no price 1 and p[i] = p[i - 1] - 2 while (sold[i]-- > 0) { transaction(cur - 1); } cur -= 2; } else { // res.second = 0 if (res.first.size() == 1) { // p[i] = p[i - 1] - 1 while (sold[i]-- > 0) { transaction(cur); } cur -= 1; } else { // p[i] = p[i - 1] - 2 and hasOne = true hasOne = true; sold[N - 1]--; while (sold[i]-- > 0) { transaction(cur - 1); } cur -= 2; } } } }
#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...