제출 #1202264

#제출 시각아이디문제언어결과실행 시간메모리
1202264ASGA_RedSeaScales (IOI15_scales)C++20
45.57 / 100
0 ms328 KiB
/**

                                    * بسم الله الرحمن الرحيم *

                ﴾ رَبِّ اشْرَحْ لِي صَدْرِي * وَيَسِّرْ لِي أَمْرِي * وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي * يَفْقَهُوا قَوْلِي ﴿

*/

/// author : "ASGA"


#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>


using namespace std;
using ll=long long;

#include "scales.h"


void answer(int w[]);
int getHeaviest(int a,int b,int c);
int getLightest(int a,int b,int c);
int getMedian(int a,int b,int c);
int getNextLightest(int a,int b,int c,int d);



void init(int T){return;}






void orderCoins(){
    int A[]={1,2,3,4,5,6};

    {
        auto s=A,e=A+4;
        int a=*s,b=*(s+1),c=*(s+2),d=*(s+3);

        vector<int>o;

        int q=getLightest(a,b,c);
        int w=getMedian(a,b,c);

        o.push_back(q);
        o.push_back(w);
        if(q==a)o.push_back(w==b?c:b);
        if(q==b)o.push_back(w==a?c:a);
        if(q==c)o.push_back(w==b?a:b);

        a=o[0],b=o[1],c=o[2];

        int ee=getNextLightest(a,b,c,d);

        if(ee==a){
            int r=getHeaviest(a,b,d);
            if(r==d)o.push_back(d);
            else o.insert(o.begin(),d);
        }
        else{
            int i=(ee==b?1:2);
            o.insert(o.begin()+i,d);
        }

        int i=0;
        while(s!=e)(*s++)=o[i++];
    }



    {
        auto s=A+2,e=A+6;
        int a=*s,b=*(s+1),c=*(s+2),d=*(s+3);

        vector<int>o;

        int q=getMedian(a,b,c);

        if(q==a)o={c,a,b};
        if(q==b)o={a,b,c};
        if(q==c)o={a,c,b};

        a=o[0],b=o[1],c=o[2];

        int ee=getNextLightest(a,b,c,d);

        if(ee==a){
            int r=getHeaviest(a,b,d);
            if(r==d)o.push_back(d);
            else o.insert(o.begin(),d);
        }
        else{
            int i=(ee==b?1:2);
            o.insert(o.begin()+i,d);
        }

        int i=0;
        while(s!=e)(*s++)=o[i++];
    }
	


    {
        auto s=A,e=A+4;
        int a=*s,b=*(s+1),c=*(s+2),d=*(s+3);

        vector<int>o;

        int q=getMedian(a,b,c);

        if(q==a){
            // o={c,a,b};
            q=getMedian(a,b,d);
			

			
            if(q==a)o={c,d,a,b};
            if(q==b)o={c,a,b,d};
            if(q==d)o={c,a,d,b};
        }
        else if(q==b){
            o={a,b,c,d};
        }
        else if(q==c){
            // o={a,c,b};
            q=getHeaviest(c,b,d);
            if(q==d)o={a,c,b,d};
            else{
                assert(q==b);
                o={a,c,d,b};
            }
        }


        int i=0;
        while(s!=e)(*s++)=o[i++];
    }



    answer(A);

    return;
}


//signed main(){
//    ios_base::sync_with_stdio(0);cin.tie(0);
//
//
//    ;
//
//
//    return 0;
//}
#Verdict Execution timeMemoryGrader output
Fetching results...