제출 #149252

#제출 시각아이디문제언어결과실행 시간메모리
149252CHT를 사랑하는 모임 (#200)포도주 시음 (FXCUP4_wine)C++17
57 / 100
11 ms1036 KiB
#include"bartender.h"
#include<algorithm>
#define eb emplace_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long ll;
typedef pair<int,int>pi;
typedef pair<ll,ll>pl;
const ll inf=1e18;
vector<int>BlendWines(int K,vector<int>R)
{
	int n=R.size();
	vector<pi>v;
	int i;
	for(i=0;i<n;i++)
		v.eb(R[i],i);
	sort(all(v));
	vector<int>ret(n);
	if(n<11)
	{
		for(i=0;i<n;i++)
			ret[v[i].se]=i+1;
	}
	else
	{
		ret[v[0].se]=10;
		ret[v[n-1].se]=10;
		ret[v[1].se]=9;
		ret[v[n-2].se]=9;
		ret[v[2].se]=8;
		ret[v[n-3].se]=8;
		ret[v[3].se]=7;
		ret[v[n-4].se]=7;
		ret[v[4].se]=6;
		ret[v[n-5].se]=6;
		for(i=0;i<5;i++)
			for(int j=0;j<4&&i*4+j+10<n;j++)
				ret[v[5+i*4+j].se]=i+1;
	}
	return ret;
}
#include"taster.h"
#include<algorithm>
#define eb emplace_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long ll;
typedef pair<int,int>pi;
typedef pair<ll,ll>pl;
const ll inf=1e18;
inline bool query(int x,int y)
{
	return Compare(x,y)==1;
}
inline void sort2(vector<int>&A)
{
	if(query(A[0],A[1]))
		swap(A[0],A[1]);
	return;
}
inline void sort3(vector<int>&A)
{
	if(query(A[0],A[1]))
		swap(A[0],A[1]);
	if(query(A[0],A[2]))
		swap(A[0],A[2]);
	if(query(A[1],A[2]))
		swap(A[1],A[2]);
	return;
}
inline void sort4(vector<int>&A)
{
	if(query(A[0],A[1]))
		swap(A[0],A[1]);
	if(query(A[2],A[3]))
		swap(A[2],A[3]);
	if(query(A[0],A[2]))
	{
		swap(A[0],A[2]);
		swap(A[1],A[3]);
	}
	if(query(A[1],A[2]))
		swap(A[1],A[2]);
	if(query(A[2],A[3]))
		swap(A[2],A[3]);
	return;
}
inline void sort(vector<int>&A)
{
	if(A.size()==2)
		sort2(A);
	if(A.size()==3)
		sort3(A);
	if(A.size()==4)
		sort4(A);
	return;
}
vector<int>SortWines(int K,vector<int>A)
{
	int n=A.size();
	vector<int>ret,ans;
	vector<int>v[10];
	int i;
	for(i=0;i<n;i++)
		v[A[i]-1].eb(i);
	if(n<11)
	{
		for(i=0;i<n;i++)
			ret.eb(v[i][0]);
	}
	else
	{
		if(query(v[9][0],v[0][0]))
			swap(v[9][0],v[9][1]);
		if(query(v[8][0],v[0][0]))
			swap(v[8][0],v[8][1]);
		if(query(v[7][0],v[0][0]))
			swap(v[7][0],v[7][1]);
		if(query(v[6][0],v[0][0]))
			swap(v[6][0],v[6][1]);
		if(query(v[5][0],v[0][0]))
			swap(v[5][0],v[5][1]);
		for(i=0;i<5;i++)
			sort(v[i]);
		for(i=10;i-->5;)
			ret.eb(v[i][0]);
		for(i=0;i<5;i++)
			for(int t:v[i])
				ret.eb(t);
		for(i=5;i<10;i++)
			ret.eb(v[i][1]);
	}
	ans.resize(n);
	for(i=0;i<n;i++)
		ans[ret[i]]=i+1;
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...