Pagini recente »
Istoria paginii utilizator/anca1243
|
Monitorul de evaluare
|
Clasament min_2_puncte
|
Monitorul de evaluare
|
Cod sursă (job #809984)
Cod sursă (job
#809984)
#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;
}