#include "souvenirs.h"
#include <bits/stdc++.h>
#define ll long long
using namespace std;
void debug(){cout << endl;}
template<class T, class ... U> void debug(T a, U ...b) {
cout << a << " ", debug(b ...);
};
template<class T> void pary (T l, T r) {
while (l!= r) cout << *l << " ", l++;
cout << endl;
};
int counts[105];
void solve(int n, int cur, vector<vector<int>> coef, vector<ll> sums, vector<ll> &given) {
//debug("solve", n, cur);
while (n >= cur) {
vector<int> last = coef.back();
ll val = sums.back();
ll que;
if (last.size() == 1) {
given[cur] = val;
que = val - 1;
if (cur == n) break;
} else {
que = val / last.size();
}
auto [terms, rem] = transaction(que);
//debug(que);
//pary(terms.begin(), terms.end());
assert(terms.size() > 0);
for (int i:terms) counts[i] += 1;
int cur_rec = terms[0];
vector<vector<int>> coef_rec = coef;
vector<ll> sums_rec = sums;
ll result = que - rem;
while (terms.size() > 0 && terms.back() > n) {
result -= given[terms.back()];
terms.pop_back();
}
coef_rec.push_back(terms);
sums_rec.push_back(result);
solve(n, cur_rec, coef_rec, sums_rec, given);
//assume that [cur_rec, n] has been solved
for (int i = 0;i < coef.size();i++) {
vector<int> &v = coef[i];
while (v.size() && v.back() >= cur_rec) {
sums[i] -= given[v.back()];
v.pop_back();
}
}
n = cur_rec-1;
}
coef.pop_back();
sums.pop_back();
}
void buy_souvenirs(int N, long long P0) {
int n = N - 1;
vector<vector<int>> coef_ini;
vector<ll> sums_ini;
coef_ini.push_back(vector<int> (1, 0));
sums_ini.push_back(P0);
vector<ll> given(N, 0);
solve(n, 0, coef_ini, sums_ini, given);
for (int i = 1;i <= n;i++) {
while (counts[i] < i) {
transaction(given[i]);
counts[i] += 1;
}
}
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... |