#include "souvenirs.h"
#include <utility>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
long long fr[105],val[105];
void buy_souvenirs(int n, long long p0)
{
for(int pas=n-1;pas>1;pas--)
{
val[pas] = -1;
if(fr[pas] >= pas)
continue;
long long cur = p0, cate = pas;
while(1)
{
cur--;
pair<vector<int>, ll> aux = transaction(cur);
ll sum = cur - aux.second;
cate = 0;
for(int x:aux.first)
{
fr[x]++;
if(x <= pas)
{
cate++;
}
else
{
sum -= val[x];
}
}
assert(cate > 0);
assert(sum <= cur);
cur = (sum + cate - 1)/cate;
if(cate == 1 && aux.first[0] == pas)
break;
}
val[pas] = cur;
}
if(fr[1] < 1)
{
pair<vector<int>, ll> aux = transaction(p0 - 1);
val[1] = (p0 - 1) - aux.second;
for(int x:aux.first)
{
fr[x]++;
if(x > 1)
val[1] -= val[x];
}
}
for(int i=1;i<n;i++)
{
//cerr<<i<<" "<<fr[i]<<" fr\n";
//cerr<<i<<" "<<val[i]<<" val\n";
//assert(fr[i] <= i);
if(fr[i] > i)
while(1);
while(fr[i] < i)
{
transaction(val[i]);
fr[i]++;
}
}
}
/*
3
4 3 2
3
4 2 1
*/
# | 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... |