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...