# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1250790 | flashmt | 선물 (IOI25_souvenirs) | C++20 | 0 ms | 0 KiB |
#include "souvenirs.h"
#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;
pair<vector<int>, long long> buy(long long coins)
{
auto [ids, rem] = transaction(coins);
return {ids, coins - rem};
}
void buy_souvenirs(int n, long long p0) {
if (n == 2)
{
buy(p0 - 1);
return;
}
if (n == 3)
{
auto [ids, cost] = buy(p0 - 1);
if (size(ids) == 2) buy(cost / 2);
else
{
buy(cost - 1);
buy(cost - 1);
}
return;
}
vector<long long> p(n);
vector<int> bought(n);
p[0] = p0;
for (int i = 1; i < n; i++)
{
int maxCost = p[i] - (p[i] + 2) / 3;
auto [ids, cost] = buy(maxCost);
if (ids != {i})
return;
p[i] = cost;
for (int j = 0; j < i - 1; j++)
buy(cost);
}
}