#include "souvenirs.h"
#include<bits/stdc++.h>
#include <utility>
#include <vector>
using namespace std;
vector<long long> ans(0);
vector<long long> br(0);
long long n;
void dfs(long long a, long long x, pair<vector<int>, long long> c) {
if(a == n-1) {
ans[n-1] = x-c.second;
br[n-1]++;
return;
}
while(ans[a+1] == -1) {
long long sb = x-c.second,z = c.first.size();
for(long long v: c.first) {
if(ans[v] != -1) {
sb-=ans[v];
z--;
}
}
long long x1 = (sb+z-1)/z-1;
pair<vector<int>,long long> d = transaction(x1);
dfs(d.first[0],x1,d);
}
long long sb = x-c.second;
for(long long v: c.first) {
if(v != a) {
sb-=ans[v];
}
br[v]++;
}
ans[a] = sb;
}
void buy_souvenirs(int N, long long p0) {
ans.clear();
br.clear();
n = N;
for(long long i = 0; i < n; i++) {
ans.push_back(-1);
br.push_back(0);
}
ans[0] = p0;
pair<vector<int>, long long> c = transaction(p0-1);
dfs(1,p0-1,c);
for(long long i = 0; i < n; i++) {
for(long long j = 0; j < i-br[i]; j++) {
transaction(ans[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... |