Submission #1156106

#TimeUsernameProblemLanguageResultExecution timeMemory
1156106aarb_.tomatexdScales (IOI15_scales)C++20
33.33 / 100
0 ms328 KiB
#include <bits/stdc++.h>
#include "scales.h"
using namespace std;

void init(int t) {
    // No se requiere inicialización especial.
}

void orderCoins() {
    // Ordenamos el Grupo 1 (monedas 1, 2, 3)
    int L1 = getLightest(1, 2, 3);
    int M1 = getMedian(1, 2, 3);
    int H1 = getHeaviest(1, 2, 3);
    
    // Ordenamos el Grupo 2 (monedas 4, 5, 6)
    int L2 = getLightest(4, 5, 6);
    int M2 = getMedian(4, 5, 6);
    int H2 = getHeaviest(4, 5, 6);
    
    // Cada grupo ya está ordenado (de menor a mayor)
    vector<int> group1 = {L1, M1, H1};
    vector<int> group2 = {L2, M2, H2};
    
    // Determinamos la moneda más pesada de todas (overallHeaviest)
    int overallHeaviest = getHeaviest(H1, H2, L1);
    
    // Función de comparación entre dos monedas.
    auto cmp = [&](int a, int b) -> bool {
        if (a == overallHeaviest) return false;
        if (b == overallHeaviest) return true;
        int res = getLightest(a, b, overallHeaviest);
        return (res == a);
    };
    
    // Fusionamos las dos listas ordenadas (merge)
    vector<int> merged;
    int i = 0, j = 0;
    while(i < group1.size() && j < group2.size()){
        if(cmp(group1[i], group2[j])){
            merged.push_back(group1[i]);
            i++;
        } else {
            merged.push_back(group2[j]);
            j++;
        }
    }
    while(i < group1.size()){
        merged.push_back(group1[i]);
        i++;
    }
    while(j < group2.size()){
        merged.push_back(group2[j]);
        j++;
    }
    
    // Se reporta la lista final usando merged.data() para pasar un int*.
    answer(merged.data());
}
#Verdict Execution timeMemoryGrader output
Fetching results...