| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1306977 | michael12 | Souvenirs (IOI25_souvenirs) | C++20 | 0 ms | 0 KiB |
#include "souvenirs.h"
#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define sm pair<vector<int>, long long>
using namespace std;
void sub3(int n, long long P0){
sm T = transaction(P0 - 1);
if(T.ff.size() == 1){
long long p1 = P0 - 1 - T.ss;
transaction(p1 - 1);
transaction(p1 - 1);
}
else{
long long sm2 = P0 - 1 - T.ss;
transaction(sm2 / 2);
}
}
void buy_souvenirs(int N, long long P0){
long long p = P0;
if(N == 2){
transaction(p - 1);
return;
}
else if(N == 3){
sub3(N, P0);
return;
}
else if(P0 == N){
for(int i = N - 1; i >= 1; i--){
for(int j = 1; j <= N - i; j++){
transaction(i);
}
}
return;
}
else{
vector<long long> dp(N, 0);
dp[0] = P0;
for(int i = 0; i < N - 1; i++){
sm T = transaction(dp[i] - 1);
if(T.ss == 1){
dp[i + 1] = dp[i] + 2;
}
else{
dp[i + 1] = dp[i] + 1;
}
}
for(i = 0; i <= N - 1; i++){
for(int j = 0; j <= N; j++){
transaction(dp[i]);
}
}
return;
}
return;
}
