#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define sp <<" "<<
#define endl "\n"
void buy_souvenirs(int N, ll P0) {
if (N == 2) {
// subtask 1
auto res = transaction(P0 - 1);
} else if (N == 3) {
// subtask 4
ll x = P0 - 1;
auto res = transaction(x);
if (res.first.size() == 1) {
ll rem = res.second;
ll y = x - rem;
ll z = y - 1;
res = transaction(z);
res = transaction(z);
} else if (res.first.size() == 2) {
ll rem = res.second;
ll b = x - rem;
ll m = (b+1) / 2;
ll z = m - 1;
res = transaction(z);
} else assert(0);
} else {
// subtask 2
// for (int i = 0; i < N; i++) {
// for (int j = 0; j < i; j++) {
// auto res = transaction(N - i);
// }
// }
// subtask 3
vector<ll> vals(N, -1);
vals[0] = P0;
vector<int> cnt(N);
for (int i = 1; i < N; i++) {
if (cnt[i] == i) continue;
if (vals[i] != -1) {
while (cnt[i] < i) {
auto res = transaction(vals[i]);
cnt[i]++;
}
continue;
}
assert(vals[i-1] != -1);
auto res = transaction(vals[i-1] - 1);
auto v = res.first;
ll rem = res.second;
if (v.empty()) continue;
else if (v[0] == i and v.size() == 1 and rem == 0) {
cnt[i]++;
vals[i] = vals[i-1] - 1;
while (cnt[i] < i) {
res = transaction(vals[i]);
cnt[i]++;
}
} else {
for (auto &x : v) cnt[x]++;
assert(v[0] == i);
if (v.size() == 2) assert(rem == 0), vals[v[1]] = 1;
vals[i] = vals[i-1] - 2;
while (cnt[i] < i) {
res = transaction(vals[i]);
cnt[i]++;
}
}
}
}
// pair<vector<int>, long long> res = transaction(3);
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... |