Submission #1357094

#TimeUsernameProblemLanguageResultExecution timeMemory
1357094coderg300711Souvenirs (IOI25_souvenirs)C++20
0 / 100
8 ms412 KiB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define pll pair<long long,long long>
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define sz(x) (int)(x).size()
#define rsz resize
#define ass assign
#define F(i,l,r) for(int i=(l);i<(r);++i)
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
template<typename T> using pqg = priority_queue<T, vector<T>, greater<T>>;
#define each(a,x) for(auto a:x)
#define FOR(i,a) for(int i=0;i<(a);i++)
#define ROF(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define eb emplace_back
#define ft front()
#define V vector

#include "souvenirs.h"

void buy_souvenirs(int n,ll p0){
	V<ll> p(n);
	p[0]=0;
	V<int> bought(n,0);
	if(n<=3){
		ll m1=p[0]-1;
		auto res=transaction(m1);
		each(t,res.fi)bought[t]++;
		if(n==2)return;
		if(n==3){
			if(sz(res.fi)==2){
				ll sum=m1-res.se,m2=(sum-1)/2;
				auto res2=transaction(m2);
				each(t,res2.fi)bought[t]++;
				p[2]=m2-res2.se;
				p[1]=sum-p[2];
			}else p[2]=m1-res.se;
		}
	}else if(p0==(ll)n){
		F(i,1,n)p[i]=n-i;
	}else{
		F(i,1,n){
			ll m=p[i-1]-1;
			auto res=transaction(m);
			each(t,res.fi)bought[t]++;
			p[i]=m-res.se;
		}
	}
	F(i,1,n){
		if(!p[i])continue;
		while(bought[i]<i){
			transaction(p[i]);
			bought[i]++;
		}
	}
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...