# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
149658 | CHT를 사랑하는 모임 (#200) | Wine Tasting (FXCUP4_wine) | C++17 | 11 ms | 1024 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |