СРОЧНО!!! C++ ДАЮ 100 БАЛЛОВ
Результаты олимпиады
Во время проведения олимпиады каждый из участников получил свой идентификационный номер — натуральное число. Необходимо отсортировать список участников олимпиады по количеству набранных ими баллов от больших баллов к меньшим, а при равенстве баллов — по возрастанию идентификационных номеров. Встроенные алгоритмы сортировки не использовать.
Входные данные
На первой строке дано число N(1≤N≤1000) — количество участников. На каждой следующей строке даны идентификационный номер и набранное число баллов соответствующего участника. Все числа во входном файле не превышают 105.
Выходные данные
Выведите исходный список в порядке убывания баллов. Если у некоторых участников одинаковые баллы, то их между собой нужно выводить в порядке возрастания идентификационных номеров.
Примеры
Ввод
Вывод
4
3 3
3 1
4 4
2 3
4 4
2 3
3 3
3 1
3
101 80
305 90
200 14
305 90
101 80
200 14
3
20 80
30 90
25 90
25 90
30 90
20 80
Answers & Comments
Ответ:
#include <bits/stdc++.h>
typedef std::pair<int, int> pair;
struct cmp {
bool operator()(const pair &a, const pair &b) const {
if (a.second != b.second)
return a.second > b.second;
return a.first < b.first;
}
};
int main() {
std::multiset<pair, cmp> mset;
int N, first, second;
std::cin >> N;
while (N) {
std::cin >> first >> second;
mset.emplace(first, second);
N--;
}
for (const pair &p: mset)
std::cout << p.first << " " << p.second << std::endl;
return 0;
}
Объяснение: