Submission #1156103

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

void init(int t) {}

void orderCoins() {
    vector<int> W(6, -1); // Inicializamos con -1 para evitar valores incorrectos

    // 1. Encontrar la moneda más ligera y la más pesada de {1,2,3} y {4,5,6}
    int L = getLightest(1, 2, 3); // Encuentra la más ligera entre {1, 2, 3}
    int H = getHeaviest(4, 5, 6); // Encuentra la más pesada entre {4, 5, 6}

    // 2. Determinar una moneda intermedia correcta
    int possible_medians[] = {1, 2, 3, 4, 5, 6};
    int M = -1;

    for (int x : possible_medians) {
        if (x != L && x != H) { 
            M = x;
            break; // Tomamos la primera moneda válida como mediana
        }
    }

    // Validación para evitar errores
    if (M == -1) {
        cerr << "Error: No se encontró una mediana válida." << endl;
        return;
    }

    // 3. Identificar las tres monedas restantes
    vector<int> remaining;
    for (int i = 1; i <= 6; i++) {
        if (i != L && i != H && i != M) remaining.push_back(i);
    }

    

    // 4. Encontrar las monedas en orden usando `getNextLightest`
    int L2 = getNextLightest(remaining[0], remaining[1], remaining[2], L);
    int L3 = getNextLightest(remaining[0], remaining[1], remaining[2], L2);
    int H2 = getNextLightest(remaining[0], remaining[1], remaining[2], L3); // La última será la más pesada de este grupo

   

    // 5. Asignar los valores encontrados al array final
    W[0] = L;
    W[1] = L2;
    W[2] = L3;
    W[3] = M;
    W[4] = H2;
    W[5] = H;

    // 6. Llamamos a answer con el orden final
    answer(W.data());
}
#Verdict Execution timeMemoryGrader output
Fetching results...