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...