Submission #149658

#TimeUsernameProblemLanguageResultExecution timeMemory
149658CHT를 사랑하는 모임 (#200)Wine Tasting (FXCUP4_wine)C++17
28 / 100
11 ms1024 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 if(n==30)
	{
		ret[v[n-1].se]=10;
		ret[v[0].se]=9;
		ret[v[n-2].se]=9;
		ret[v[1].se]=8;
		ret[v[n-3].se]=8;
		ret[v[2].se]=7;
		ret[v[n-4].se]=7;
		ret[v[3].se]=6;
		ret[v[n-5].se]=6;
		for(i=0;i<3;i++)
			for(int j=0;j<4;j++)
				ret[v[4+i*4+j].se]=i+1;
		ret[v[16].se]=6;
		for(i=3;i<5;i++)
			for(int j=0;j<4;j++)
				ret[v[5+i*4+j].se]=i+1;
	}
	else
	{
		ret[v[n-1].se]=10;
		ret[v[0].se]=9;
		ret[v[n-2].se]=9;
		ret[v[1].se]=8;
		ret[v[n-3].se]=8;
		ret[v[2].se]=7;
		ret[v[n-4].se]=7;
		ret[v[3].se]=6;
		ret[v[n-5].se]=6;
		for(i=0;i<5;i++)
			for(int j=0;j<4&&i*4+j+9<n;j++)
				ret[v[4+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(n==30)
	{
		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]);
		for(i=0;i<5;i++)
			sort(v[i]);
		if(query(v[5][0],v[0][0]))
		{
			if(query(v[5][0],v[3][0]))
			{
				if(query(v[5][1],v[0][0]))
					swap(v[5][0],v[5][2]);
				else
				{
					int t=v[5][0];
					v[5][0]=v[5][1];
					v[5][1]=v[5][2];
					v[5][2]=t;
				}
			}
			else
			{
				if(query(v[5][1],v[0][0]))
				{
					int t=v[5][0];
					v[5][0]=v[5][2];
					v[5][2]=v[5][1];
					v[5][1]=t;
				}
				else
					swap(v[5][0],v[5][1]);
			}
		}
		else
		{
			if(query(v[5][1],v[3][0]))
				swap(v[5][1],v[5][2]);
		}
		for(i=9;i-->5;)
			ret.eb(v[i][0]);
		for(i=0;i<3;i++)
			for(int t:v[i])
				ret.eb(t);
		ret.eb(v[5][1]);
		for(i=3;i<5;i++)
			for(int t:v[i])
				ret.eb(t);
		ret.eb(v[5][2]);
		for(i=6;i<9;i++)
			ret.eb(v[i][1]);
		ret.eb(v[9][0]);
	}
	else
	{
		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=9;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<9;i++)
			ret.eb(v[i][1]);
		ret.eb(v[9][0]);
	}
	ans.resize(n);
	for(i=0;i<n;i++)
		ans[ret[i]]=i+1;
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...