#include "scales.h"
#include <vector>
#include <algorithm>
using namespace std;
void init(int T) {
return;
}
// Encuentra la mas ligera de las monedas dadas
int encontrarMasLigera(vector<int> & monedas) {
// Primero, nos guardamos todos los numeros que no aparecen para usarlos en
// preguntas. Sabemos que son mas pesados que los que quedan.
vector<int> extras;
for (int i = 1; i <= 6; i++) {
if (find(monedas.begin(), monedas.end(), i) == monedas.end()) {
extras.push_back(i);
}
}
// Encontramos la mas ligera de las primeras 3 monedas.
int monedasPregunta[3];
for (size_t i = 0; i < 3; i++) {
if (i < monedas.size()) {
monedasPregunta[i] = monedas[i];
} else {
monedasPregunta[i] = extras[i - monedas.size()];
}
}
int masLigera1 = getLightest(
monedasPregunta[0], monedasPregunta[1], monedasPregunta[2]
);
if (monedas.size() <= 3) {
return masLigera1;
}
// Encontramos la mas ligera de las segundas 3 monedas.
for (size_t i = 3; i < 6; i++) {
if (i < monedas.size()) {
monedasPregunta[i - 3] = monedas[i];
} else {
monedasPregunta[i - 3] = extras[i - monedas.size()];
}
}
int masLigera2 = getLightest(
monedasPregunta[0], monedasPregunta[1], monedasPregunta[2]
);
int extra;
// Finalmente, encontramos la mas ligera de las dos monedas "ganadoras".
for (int i = 1; i <= 6; i++) {
if (i != masLigera1 && i != masLigera2) {
extra = i;
break;
}
}
return getLightest(masLigera1, masLigera2, extra);
}
void orderCoins() {
vector<int> monedasPendientes = {1, 2, 3, 4, 5, 6};
int respuesta[6];
int masLigera;
// Resolvemos el problema de forma iterativa encontrando la mas ligera
while (!monedasPendientes.empty()) {
masLigera = encontrarMasLigera(monedasPendientes);
respuesta[6 - monedasPendientes.size()] = masLigera;
monedasPendientes.erase(
find(monedasPendientes.begin(), monedasPendientes.end(), masLigera)
);
}
answer(respuesta);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |