제출 #1345417

#제출 시각아이디문제언어결과실행 시간메모리
1345417enzy저울 (IOI15_scales)C++20
56.42 / 100
0 ms344 KiB
#include "scales.h"
#include<bits/stdc++.h>
using namespace std;

void init(int T){
}

void orderCoins(){
    vector<int>freq(7,0);
    int a, b, c;
    int d, e, f;
    a=getLightest(1,2,3);
    c=getHeaviest(1,2,3);
    freq[a]++; freq[c]++;
    for(int i=1;i<=3;i++) if(!freq[i]) b=i;

    d=getLightest(4,5,6);
    f=getHeaviest(4,5,6);
    freq[d]++; freq[f]++;
    for(int i=4;i<=6;i++) if(!freq[i]) e=i;

    int m=getMedian(a,b,e);
    int resp[6];
    if(m==e){
        // a e b
        int x=getMedian(b,c,f), y=getMedian(a,d,e);
        if(x==f) resp[3]=b, resp[4]=f, resp[5]=c;
        if(x==b) resp[3]=f, resp[4]=b, resp[5]=c;
        if(x==c) resp[3]=b, resp[4]=c, resp[5]=f;

        if(y==a) resp[0]=d, resp[1]=a, resp[2]=e;
        if(y==d) resp[0]=a, resp[1]=d, resp[2]=e;

        answer(resp);
        return;
    }
    if(m==b){
        // a b e
        int x=getMedian(e,f,c);
        if(x==f){
            resp[3]=e; resp[4]=f; resp[5]=c;
            int y=getMedian(a,b,d);
            if(y==a) resp[0]=d, resp[1]=a, resp[2]=b;
            if(y==b) resp[0]=a, resp[1]=b, resp[2]=d;
            if(y==d) resp[0]=a, resp[1]=d, resp[2]=b;
        }
        if(x==c){
            resp[3]=e; resp[4]=c; resp[5]=f;
            int y=getMedian(a,b,d);
            if(y==a) resp[0]=d, resp[1]=a, resp[2]=b;
            if(y==b) resp[0]=a, resp[1]=b, resp[2]=d;
            if(y==d) resp[0]=a, resp[1]=d, resp[2]=b;
        }
        if(x==e){
            resp[4]=e; resp[5]=f;
            int y=getNextLightest(a,b,c,d);
            if(y==a){
                int z=getLightest(a,d,f);
                if(z==a) resp[0]=a, resp[1]=b, resp[2]=c, resp[3]=d;
                if(z==d) resp[0]=d, resp[1]=a, resp[2]=b, resp[3]=c; 
            }
            if(y==b) resp[0]=a, resp[1]=d, resp[2]=b, resp[3]=c;
            if(y==c) resp[0]=a, resp[1]=b, resp[2]=d, resp[3]=c;
        }

        answer(resp);
        return;
    }
    if(m==a){
        // d e (a,b,c,f)
        resp[0]=d; resp[1]=e;
        int at=getMedian(a,b,f);
        if(at==b){
            resp[2]=a; resp[3]=b;
            if(getHeaviest(a,c,f)==c) resp[5]=c, resp[4]=f;
            else resp[4]=c, resp[5]=f; 
            answer(resp);
            return;
        }
        if(at==a){
            resp[2]=f; resp[3]=a; resp[4]=b; resp[5]=c;
            answer(resp);
            return;
        }
        if(at==f){
            resp[2]=a; resp[3]=f; resp[4]=b; resp[5]=c;
            answer(resp);
            return;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...