# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1259354 | sdkjflkjsldkfj | 선물 (IOI25_souvenirs) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
//typedef long long ll;
//#define int ll
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()
const int MOD=1000000007;
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define fios(); ios_base::sync_with_stdio(0);cin.tie(0);
#define fraction(x); cout.unsetf(ios::floatfield); cout.precision(x); cout.setf(ios::fixed,ios::floatfield);
#define file(); freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
/*
const int maxN=1e5 + 15;
int a[maxN];
int n;
int cnt[maxN];
pair<vector<int>,long long> transaction(long long m){
vector<int> memo;
for(int i=0;i<n;i++){
if(a[i]<=m){
cnt[i]++;
m-=a[i];
memo.pb(i);
}
}
return {memo,m};
}
*/
void buy_souvenirs(int n, long long p0){
if(n==2){
//subtask 1
transaction(p0-1);
return ;
}
if(n==3){
pair<vector<int>,long long> tem=transaction(p0-1);
vector<int> memo=tem.ff;
if(memo.size()==1){
long long cost=(p0-1)-tem.ss;
transaction(cost-1);
transaction(cost-1);
}else{
long long cost=(p0-1)-tem.ss;
transaction((cost/2));
/*while(1){
pair<vector<int>,long long> p=transaction(1);
if((p.ff).size()>0) break;
}*/
}
return ;
}
//subtask 3
pair<vector<int>,long long> tem;
int o=n-1,prev=p0;
for(int i=0;i<n;i++){
if((i==(n-1))&&(o!=i)){
for(int j=0;j<o;j++) transaction(1);
return ;
}
tem=transaction(prev-1);
int v=prev-1;
if((tem.ss)||(tem.ff.size()>1)) v--;
if(tem.ff.size()>1)o--;
for (int j=1;j<i;j++j) transaction(v);
prev=v;
}
return ;
}