КОД
def merge_sort(arr, key=lambda x: x):
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half, key)
merge_sort(right_half, key)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if key(left_half[i]) < key(right_half[j]):
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
def main():
import sys
input =
sys.stdin.read data = input().splitlines()
N = int(data[0])
participants = []
for i in range(1, N + 1):
id_num, score = map(int, data[i].split())
participants.append((id_num, score))
# Сортировка по количеству баллов в убывающем порядке, а при равенстве баллов — по идентификационному номеру в возрастающем порядке
merge_sort(participants, key=lambda x: (-x[1], x[0]))
for participant in participants:
print(participant[0], participant[1])
if __name__ == "__main__":
main()
КОД
Функция merge_sort:
Функция реализует алгоритм сортировки слиянием. Она сортирует массив, разделяя его на две части, рекурсивно сортируя каждую часть и затем объединяя их в отсортированном порядке.
Параметр key используется для сортировки по определённому критерию. В этом случае это lambda x: (-x[1], x[0]), что обеспечивает сортировку по баллам в убывающем порядке и по идентификационному номеру в возрастающем порядке при равенстве баллов.
Функция main:
Считывает данные, создает список участников и вызывает функцию сортировки.
После сортировки выводит результаты.
Во время проведения олимпиады каждый из участников получил свой идентификационный номер — натуральное число. Необходимо отсортировать список участников олимпиады по количеству набранных ими баллов от больших баллов к меньшим, а при равенстве баллов — по возрастанию идентификационных номеров. Встроенные алгоритмы сортировки не использовать.
Входные данные
На первой строке дано число ?(1≤?≤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