#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
#define ll long long
void buy_souvenirs(int N, long long P0)
{
if (N == 2)
{
std::pair<std::vector<int>, long long> res = transaction(P0 - 1);
}
else if (N == 3)
{
std::pair<std::vector<int>, long long> res = transaction(P0 - 1);
if (res.first.size() == 1)
{
long long p1 = P0 - 1 - res.second; // a > b > c // b+c+x=a-1 => c = a-1-x-b
std::pair<std::vector<int>, long long> res1 = transaction(p1 - 1);
transaction(p1 - res1.second - 1);
}
else
{
long long x = P0 - 1 - res.second;
transaction((x - 1) / 2);
}
}
else if(P0 == N)
{
for (int i = 1; i < N; i++)
{
for (int j = 0; j < i; j++)
{
transaction(N - i);
}
}
} else {
int cnt1 = N-1;
int ans[N]; ans[0] = P0;
bool is1 = false;
for(int i = 1; i < N; i++) {
if(i == N-1 && is1) continue;
auto tt = transaction(ans[i-1]-1);
// cout << 1 << " " << ans[i-1]-1 << endl;
ans[i] = ans[i-1] - tt.second - 1;
if(tt.first.size() == 2) cnt1--, ans[i]--, is1 = true;
for(int j = 0; j < i-1; j++) transaction(ans[i]);
}
while(cnt1--) transaction(1);
}
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... |