СРОЧНО!!! 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


YaKubikK: хз

Ответы

Ответ дал: qqwww1980
1

Ответ:

#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;

}

Объяснение:

Похожие вопросы