제출 #1366587

#제출 시각아이디문제언어결과실행 시간메모리
1366587mar선물 (IOI25_souvenirs)C++20
39 / 100
8 ms344 KiB
#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
typedef long long ll;
const int maxn=105;

ll p[maxn],num[maxn],suf;
int cnt[maxn];
vector<int> g[maxn];

void sol(ll v){
	auto r=transaction(v);
	v-=r.second;
	int u=r.first[0];

	for(auto x:r.first){
		g[u].push_back(x);
		cnt[x]++;
	}

	while(!g[u].empty() && g[u].back()>suf){
		v-=num[g[u].back()];
		g[u].pop_back();
	}

	while(suf>u+1){
		int k=g[u].size();
		ll nv=(v+k-1)/k-1;
		sol(nv);

		while(!g[u].empty() && suf<=g[u].back()){
			v-=num[g[u].back()];
			g[u].pop_back();
		}
	}

	num[u]=v;
	suf--;
}

void buy_souvenirs(int n, ll p0){
	p[0]=p0;

	suf=n;
	sol(p0-1);

	for(int i=1;i<n;i++){
		while(cnt[i]<i){
			transaction(num[i]);
			cnt[i]++;
		}
	}
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…