#include <bits/stdc++.h>
#include "scales.h"
using namespace std;
#define pb push_back
vector<vector<int>> all;
void init(int T) {
    vector<int> vec={1,2,3,4,5,6};
    do{
        all.pb(vec);
    }
    while(next_permutation(vec.begin(),vec.end()));
}
vector<int> sol(vector<vector<int>> vecs){
    if(vecs.size()==1)return vecs[0];
    int mn=1e9,type;
    vector<int> ask;
    for(int a=1;a<=6;a++){
        for(int b=a+1;b<=6;b++){
            for(int c=b+1;c<=6;c++){
                //if i ask lightest
                vector<vector<int>> v[3];
                for(auto i:vecs){
                    int posa,posb,posc;
                    for(int j=0;j<6;j++){
                        if(i[j]==a)posa=j;
                        if(i[j]==b)posb=j;
                        if(i[j]==c)posc=j;
                    }
                    int m=min({posa,posb,posc});
                    if(posa==m)v[0].pb(i);
                    else if(posb==m)v[1].pb(i);
                    else v[2].pb(i);
                }
                if(max({v[0].size(),v[1].size(),v[2].size()})<mn){
                    mn=max({v[0].size(),v[1].size(),v[2].size()});
                    ask={a,b,c}; type=0;
                }
                //if i ask max
                v[0].clear(); v[1].clear(); v[2].clear();
                for(auto i:vecs){
                    int posa,posb,posc;
                    for(int j=0;j<6;j++){
                        if(i[j]==a)posa=j;
                        if(i[j]==b)posb=j;
                        if(i[j]==c)posc=j;
                    }
                    int m=max({posa,posb,posc});
                    if(posa==m)v[0].pb(i);
                    else if(posb==m)v[1].pb(i);
                    else v[2].pb(i);
                }
                if(max({v[0].size(),v[1].size(),v[2].size()})<mn){
                    mn=max({v[0].size(),v[1].size(),v[2].size()});
                    ask={a,b,c}; type=1;
                }
                //if i ask median
                v[0].clear(); v[1].clear(); v[2].clear();
                for(auto i:vecs){
                    int posa,posb,posc;
                    for(int j=0;j<6;j++){
                        if(i[j]==a)posa=j;
                        if(i[j]==b)posb=j;
                        if(i[j]==c)posc=j;
                    }
                    int arr[3]={posa,posb,posc};
                    sort(arr,arr+3);
                    int m=arr[1];
                    if(posa==m)v[0].pb(i);
                    else if(posb==m)v[1].pb(i);
                    else v[2].pb(i);
                }
                if(max({v[0].size(),v[1].size(),v[2].size()})<mn){
                    mn=max({v[0].size(),v[1].size(),v[2].size()});
                    ask={a,b,c}; type=2;
                }
                for(int k=c+1;k<=6;k++){
                    //if i ask nextheaviest
                    v[0].clear(); v[1].clear(); v[2].clear();
                    for(auto i:vecs){
                        int posa,posb,posc,posk;
                        for(int j=0;j<6;j++){
                            if(i[j]==a)posa=j;
                            if(i[j]==b)posb=j;
                            if(i[j]==c)posc=j;
                            if(i[j]==k)posk=j;
                        }
                        int arr[3]={posa,posb,posc};
                        sort(arr,arr+3);
                        if(posc<posk || posk<posa)v[0].pb(i);
                        if(posk<posb)v[1].pb(i);
                        if(posk<posc)v[2].pb(i);
                    }
                    if(max({v[0].size(),v[1].size(),v[2].size()})<mn){
                        mn=max({v[0].size(),v[1].size(),v[2].size()});
                        ask={a,b,c,k}; type=3;
                    }
                }
            }
        }
    }
   // cout<<type<<' '<<vecs.size()<<endl;
    vector<vector<int>> v;
    if(type==0){
        int x=getLightest(ask[0],ask[1],ask[2]);
       // cout<<ask[0]<<" "<<ask[1]<<" "<<ask[2]<<" "<<x<<endl;
        for(auto i:vecs){
            int posa,posb,posc;
            for(int j=0;j<6;j++){
                if(i[j]==ask[0])posa=j;
                if(i[j]==ask[1])posb=j;
                if(i[j]==ask[2])posc=j;
            }
            int m=min({posa,posb,posc});
            if(posa==m && x==ask[0])v.pb(i);
            else if(posb==m && x==ask[1])v.pb(i);
            else if(posc==m && x==ask[2])v.pb(i);
        }
    }
   // cout<<v.size()<<endl;
   // exit(0);
    if(type==1){
        int x=getHeaviest(ask[0],ask[1],ask[2]);
        for(auto i:vecs){
            int posa,posb,posc;
            for(int j=0;j<6;j++){
                if(i[j]==ask[0])posa=j;
                if(i[j]==ask[1])posb=j;
                if(i[j]==ask[2])posc=j;
            }
            int m=max({posa,posb,posc});
            if(posa==m && x==ask[0])v.pb(i);
            else if(posb==m && x==ask[1])v.pb(i);
            else if(posc==m && x==ask[2])v.pb(i);
        }
    }
    if(type==2){
        int x=getMedian(ask[0],ask[1],ask[2]);
        for(auto i:vecs){
            int posa,posb,posc;
            for(int j=0;j<6;j++){
                if(i[j]==ask[0])posa=j;
                if(i[j]==ask[1])posb=j;
                if(i[j]==ask[2])posc=j;
            }
            int arr[3]={posa,posb,posc};
            sort(arr,arr+3);
            int m=arr[1];
            if(posa==m && x==ask[0])v.pb(i);
            else if(posb==m && x==ask[1])v.pb(i);
            else if(posc==m && x==ask[2])v.pb(i);
        }
    }
    if(type==3){
        int x=getNextLightest(ask[0],ask[1],ask[2],ask[3]);
        for(auto i:vecs){
            int posa,posb,posc,posk;
            for(int j=0;j<6;j++){
                if(i[j]==ask[0])posa=j;
                if(i[j]==ask[1])posb=j;
                if(i[j]==ask[2])posc=j;
                if(i[j]==ask[3])posk=j;
            }
            int arr[3]={posa,posb,posc};
            sort(arr,arr+3);
            if(ask[0]==x && (posc<posk || posk<posa))v.pb(i);
            if(ask[1]==x && posk<posb)v.pb(i);
            if(ask[2]==x && posk<posc)v.pb(i);
        }
    }
    return sol(v);
}
void orderCoins() {
    /* ... */
    int W[] = {1, 2, 3, 4, 5, 6};
    vector<int> vec=sol(all);
    for(int i=0;i<6;i++){
        W[i]=vec[i];
       // cout<<W[i]<<' ';
    }
   // cout<<endl;
    answer(W);
}
//3 4 6 2 1 5
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |