Cod sursă (job #809984)

Utilizator avatar Crimz0n25 Stefan Tanas Crimz0n25 IP ascuns
Problemă Domino Compilator cpp-32 | 2.15 kb
Rundă Arhiva de probleme Status evaluat
Dată 20 feb. 2025 15:03:55 Scor 0
#include <iostream>
#include <vector>
#include <algorithm>

struct Piesa {
    int a, b; // cifrele de pe piesa
    int index; // pozi?ia piesei pe masa
    int beneficiu_rotire;
    int cost_eliminare;
    bool eliminata = false;
    bool rotita = false;
};

bool cmpEliminare(const Piesa& p1, const Piesa& p2) {
    return p1.cost_eliminare < p2.cost_eliminare;
}

bool cmpRotire(const Piesa& p1, const Piesa& p2) {
    return p1.beneficiu_rotire > p2.beneficiu_rotire;
}

int main() {
    int N, K1, K2;
    std::cin >> N >> K1 >> K2;
    std::vector<Piesa> piese(N);

    for (int i = 0; i < N; ++i) {
        std::cin >> piese[i].a >> piese[i].b;
        piese[i].index = i;
        piese[i].beneficiu_rotire = piese[i].b - piese[i].a;
        piese[i].cost_eliminare = (piese[i].a * 10 + piese[i].b) * (N - i);
    }

    // Selectam piesele pentru eliminare
    std::sort(piese.begin(), piese.end(), cmpEliminare);
    int eliminari_ramase = K2;
    for (int i = 0; i < N && eliminari_ramase > 0; ++i) {
        piese[i].eliminata = true;
        --eliminari_ramase;
    }

    // Selectam piesele pentru rotire
    std::vector<Piesa> piese_pentru_rotire;
    for (auto& piesa : piese) {
        if (!piesa.eliminata && piesa.beneficiu_rotire > 0) {
            piese_pentru_rotire.push_back(piesa);
        }
    }
    std::sort(piese_pentru_rotire.begin(), piese_pentru_rotire.end(), cmpRotire);
    int rotiri_ramase = K1;
    for (auto& piesa : piese_pentru_rotire) {
        if (rotiri_ramase > 0) {
            piese[piesa.index].rotita = true;
            --rotiri_ramase;
        } else {
            break;
        }
    }

    // Construim numarul final
    std::string rezultat;
    for (auto& piesa : piese) {
        if (piesa.eliminata)
            continue;
        if (piesa.rotita) {
            rezultat += std::to_string(piesa.b);
            rezultat += std::to_string(piesa.a);
        } else {
            rezultat += std::to_string(piesa.a);
            rezultat += std::to_string(piesa.b);
        }
    }

    // Afi?am rezultatul
    std::cout << rezultat << std::endl;

    return 0;
}