#include "souvenirs.h"
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
#define rep(i,s,e) for (int i = s; i <= e; ++i)
#define rrep(i,s,e) for (int i = s; i >= e; --i)
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define len(a) (int)a.size()
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<ll, ll> pll;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef vector<double> vd;
typedef vector<string> vs;
typedef vector<ll> vll;
const int mx = 100;
ll sum[mx+1], val[mx+1], c[mx+1], d, n;
vi who[mx+1];
int buy (ll p) {
pair<vi, ll> res = transaction (p);
int f = res.fi [0];
sum[f] = p - res.se;
who[f] = res.fi;
for (int el : res.fi) ++c[el];
return f;
}
void go (int i) {
while (true) {
int k = 0;
ll s = 0;
for (int j : who[i]) {
k += val[j] > 0;
s += val[j];
}
if (k == len(who[i])-1) val[i] = sum[i] - s;
if (val[i]) {
if (i == n-1-d) {
++d;
return;
}
else go ( buy ( val[i]-1 ) );
}
else go ( buy ( (sum[i]-s)/(len(who[i])-k) ) );
}
}
void buy_souvenirs(int N, long long P0) {
n = N;
who[0].pb(0);
sum[0] = P0;
val[0] = P0;
go (0);
rep (i,1,N-1) while (c[i] < i) buy (val[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... |