#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
#define double long double
#define ull unsigned long long
#define BIG __int128
#define fi first
#define se second
#define MASK(i) (1ll << i)
#define BIT(x, i) (((x) >> (i)) & 1)
#define sz(x) (int)(x).size()
#define debug cout << "NO ERROR", exit(0);
#define TASK "txt"
#define IOS ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
const int MOD = 1e9 + 7;
const long long INF = 1000000000000000000ll;
const int LimN = 100 + 5;
void maximize(int &x, int y){
x = max(x, y);
}
void minimize(int &x, int y){
x = min(x, y);
}
void add(int &x, int y){
x = (x % MOD + y % MOD) % MOD;
}
long long cnt[LimN], p[LimN], pw[65];
void buy_souvenirs(int n, long long P0){
pw[0] = 1;
for (int i = 1; i < 63; i ++) pw[i] = pw[i - 1] * 2;
p[0] = P0;
for (int i = n - 1; i > 0; i --){
int val = min(P0 - 1, P0 / pw[i - 1]);
auto [v, r] = transaction(val);
int cost = val - r;
for (auto x : v){
cnt[x] ++;
if (x != i) cost -= p[x];
}
p[i] = cost;
}
// for (int i = 1; i < n; i ++) cout << cnt[i] << " ";
// cout << "\n";
// for (int i = 0; i < n; i ++) cout << p[i] << " ";
// cout << "\n";
for (int i = 1; i < n; i ++){
for (int j = cnt[i] + 1; j <= i; j ++) transaction(p[i]);
}
}
# | 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... |