Submission #1342414

#TimeUsernameProblemLanguageResultExecution timeMemory
1342414StefanSebezFestival (IOI25_festival)C++20
100 / 100
69 ms11272 KiB
#include "festival.h"
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
const ll INF=1e16;
vector<int> max_coupons(int A1,vector<int>P1,vector<int>T1){
	ll A=A1;vector<ll>P,T;
	int n=P1.size(),ord[n]={0};
	for(int i=0;i<n;i++)P.pb(P1[i]),T.pb(T1[i]);
	iota(ord,ord+n,0);
	sort(ord,ord+n,[&](int i,int j){
		if(T[i]==1&&T[j]==1)return P[i]<P[j];
		if(T[i]==1)return false;
		if(T[j]==1)return true;
		return P[i]*T[i]*(T[j]-1)<P[j]*T[j]*(T[i]-1);
	});
	vector<int>res,a[5];
	for(auto i:ord){
		if((A-P[i])*T[i]>=A){
			A=min((A-P[i])*T[i],INF);
			res.pb(i);
		}
		else a[T[i]].pb(i);
	}
	for(int j=2;j<=4;j++){
		ll X=A;
		for(int I=0;I<(int)a[j].size();I++){
			int i=a[j][I];
			if((X-P[i])*T[i]<0){
				a[j].resize(I);
				break;
			}
			X=(X-P[i])*T[i];
		}
	}
	int invord[n];
	for(int i=0;i<n;i++)invord[ord[i]]=i;
	vector<int>ans;
	for(int I=0;I<=(int)a[2].size();I++){
		for(int J=0;J<=(int)a[3].size();J++){
			for(int K=0;K<=(int)a[4].size();K++){
				vector<int>ids;
				for(int i=0;i<I;i++)ids.pb(a[2][i]);
				for(int i=0;i<J;i++)ids.pb(a[3][i]);
				for(int i=0;i<K;i++)ids.pb(a[4][i]);
				sort(ids.begin(),ids.end(),[&](int i,int j){return invord[i]<invord[j];});
				ll X=A;
				bool moze=true;
				for(auto i:ids){
					if((X-P[i])*T[i]<0){moze=false;break;}
					X=(X-P[i])*T[i];
				}
				if(moze){
					for(auto i:a[1]){
						if((X-P[i])*T[i]<0)break;
						X=(X-P[i])*T[i];
						ids.pb(i);
					}
					if(ids.size()>ans.size())ans=ids;
				}
			}
		}
	}
	for(auto i:ans)res.pb(i);
	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...