#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
using ll = long long;
using res_type = pair<vector<int>, ll>;
void buy_souvenirs(int N, ll P0) {
res_type res;
if (N == 2) { // s1
res = transaction(P0 - 1);
return;
}
if (N == 3) { // s4
res = transaction(P0 - 1);
bool bought_p2 = find(res.first.begin(), res.first.end(), 2) != res.first.end();
ll change = res.second;
ll used = (P0 - 1) - change;
// for (int i : res.first)
// cerr << i << ' ';
// cerr << '\n';
if (bought_p2) {
ll p1 = used / 2 + 1; // note, floordiv
transaction(used - p1);
} else { // then (p0 - 1) was not enough?
ll p1 = used;
transaction(p1 - 1);
transaction(p1 - 1);
}
return;
}
if (P0 == N) { // s2
for (int i = 1; i < N; i++) {
int price = N - i;
for (int amt = 1; amt <= i; amt++) {
transaction(price);
}
}
return;
}
vector<ll> cnt(N + 1);
for (int i = 1; i < N; i++) {
cnt[i] = i;
}
ll P_i = P0;
ll to_buy = 0;
for (int i = 1; i < N; i++) {
ll bought, change;
while (cnt[i] > 0) {
res = transaction(P_i - 1);
for (int tp : res.first) {
// cerr << tp << ' ';
cnt[tp]--;
}
// cerr << '\n';
if (res.first.size() > 1) {
P_i--;
}
}
P_i--;
}
return;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |