#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
std::pair<std::vector<int>, long long> transaction(long long M);
ll res[201], cnt[201], tmp[201];
void buy_souvenirs(int n, long long p) {
memset(res, 0x3f, sizeof res);
res[0] = p;
for (int i = 1; i < n; i ++) {
res[i] = min({res[i], 3 * res[i - 1] / 4});
if (i != 1) res[i] = min(res[i], (ll)ceill(res[i - 2] / (ld)2));
for (int j = cnt[i] + 1; j <= i; j ++) {
tmp[i] = res[i - 1] / 2;
for (int k = i + 1; k < n; k ++)
tmp[k] = tmp[k - 1] / 2;
tmp[n - 1] = max(tmp[n - 1], 1ll);
tmp[n - 2] = max(tmp[n - 2], 2ll);
for (int k = n - 3; k >= i; k --)
tmp[i] = max(tmp[i], tmp[i + 1] + tmp[i + 2]);
// cout << "???: " << i << ' ' << res[i] << endl;
auto [v, x] = transaction(res[i]);
// cout << "Buy: " << res[i] << endl;
for (int k = 0; k < v.size(); k ++) {
cnt[v[k]] ++;
if (k != 0) res[i] -= tmp[v[k]];
}
res[i] -= x;
// cout << "Res: " << res[i] << endl;
// for (auto x: v) cout << x << ' '; cout << endl;
// cout << "Rem: " << x << endl;
// cout << "Tmp: " << endl;
// for (int k = i; k < n; k ++) cout << i << ' ' << tmp[k] << endl;
}
}
// for (int i = 0; i < n; i ++) cout << res[i] << ' '; cout << endl;
}
# | 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... |