제출 #1126808

#제출 시각아이디문제언어결과실행 시간메모리
1126808BlancaHM저울 (IOI15_scales)C++17
컴파일 에러
0 ms0 KiB
#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 (monedasPendientes.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 - monedas.size()] = masLigera;
        monedasPendientes.erase(
            find(monedasPendientes.begin(), monedasPendientes.end(), masLigera)
        );
    }
    answer(respuesta);
}

컴파일 시 표준 에러 (stderr) 메시지

scales.cpp: In function 'int encontrarMasLigera(std::vector<int>&)':
scales.cpp:34:9: error: 'monedasPendientes' was not declared in this scope
   34 |     if (monedasPendientes.size() <= 3) {
      |         ^~~~~~~~~~~~~~~~~
scales.cpp: In function 'void orderCoins()':
scales.cpp:69:23: error: 'monedas' was not declared in this scope
   69 |         respuesta[6 - monedas.size()] = masLigera;
      |                       ^~~~~~~