Submission #1242140

#TimeUsernameProblemLanguageResultExecution timeMemory
1242140KindaGoodGamesScales (IOI15_scales)C++20
33.33 / 100
1 ms328 KiB
#include "scales.h"
#include<bits/stdc++.h>

using namespace std;

void init(int T) {
    /* ... */
}

void orderCoins() {
    // 2 queries
    int lo = getLightest(1,2,3);
    lo = getLightest(lo,4,5);
    if(lo != 5){
        lo = getLightest(lo,5,6); 
    }else{
        lo = getLightest(lo,4,6);  
    }

    int pt = 1;
    int ans[] = {lo,-1,-1,-1,-1,-1};

    set<int> left;
    for(int i = 1; i <= 6; i++){
        left.insert(i);
    }
    left.erase(lo);
    for(int k = 0; k < 3; k++){

        vector<int> notLo;
        for(int t = 0; t < 4; t++){ 
            for(int i = 1; i <= 6; i++){
                if(i == lo || !left.count(i)) continue;
                notLo.push_back(i);
            } 
        }
        int nlo = -1;

        // 2 x 2 queries
        if(k <= 1){ 
            vector<int> q1;
            vector<int> q2;

            int ind = 0;
            while(q1.size() < 3){
                if(find(q1.begin(),q1.end(), notLo[ind]) == q1.end()){
                    q1.push_back(notLo[ind]);
                }
                ind++;
            }
            while(q2.size() < 3){
                if(find(q2.begin(),q2.end(), notLo[ind]) == q2.end()){
                    q2.push_back(notLo[ind]);
                }
                ind++;
            }

            int nlo1 = getNextLightest(q1[0],q1[1],q1[2],lo);  
            int nlo2 = getNextLightest(q2[0],q2[1],q2[2],lo);   
            if(nlo1 == nlo2){
                nlo = nlo1;
            }else{
                nlo = getMedian(lo,nlo1,nlo2);
            }
        }
        // 1 x 1 queries
        else{
            vector<int> q;
            for(int i = 0; i < 6; i++){
                if(left.count(i+1)){
                    q.push_back(i+1);
                }
            }
            nlo = getLightest(q[0],q[1],q[2]);
        }

        lo = nlo;
        ans[pt++] = lo;
        left.erase(lo);
    }
    // 1 x 1 queries
    int f = getMedian(ans[0], *left.begin(), *left.rbegin());
    ans[4] = f;
    left.erase(f);
    ans[5] = *left.begin();

    answer(ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...