Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
На соревнованиях по спортивнориентированию каждый участник должен пройти маршрут, посещая контрольные точки. Все контрольные точки пронумерованы натуральными числами начиная с 1. В начале сезона соревнований каждому спортсмену присваивается уникальный номер — натуральное число, не превышающее 1 000 000. Жюри фиксирует факт прохождения спортсменом контрольной точки. На разных этапах соревнований спортсмен может посетить одну и ту же контрольную точку в произвольном порядке несколько раз или не посетить совсем.
Тренер в конце сезона анализирует результаты этапов соревнования, чтобы выявить контрольную точку, которую посетило наибольшее
число спортсменов с идущими подряд номерами. Определите максимальное число спортсменов с идущими подряд номерами и номер найденной контрольной точки. Если таких групп спортсменов несколько, укажите наименьший номер посещённой группой контрольной точки.
Входные данные
В первой строке входного файла находится число N (натуральное число, не превышающее 1 000 000) — количество посещений спортсменами контрольных точек в течение всего сезона соревнований. Каждая из следующих N строк содержит два натуральных числа, не превышающих 1 000 000: номер спортсмена и номер посещённой им контрольной точки.
Выходные данные
Два целых неотрицательных числа: максимальное число спортсменов с идущими подряд номерами, посетивших одну и ту же
точку, и номер этой точки.
Типовой пример организации входных данных
9
41 3
43 125
50 33
42 125
42 126
42 127
41 125
50 126
42 126
Для приведённого примера точку с номером 125 посетили три спортсмена с номерами 41, 42 и 43. Ответом является пара чисел: 3; 125.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов
data = []
with open('2621.txt') as file:
next(file)
for line in file:
parts = line.strip().split()
data.append((int(parts[0]), int(parts[1])))
unique_data = list(dict.fromkeys(data))
sorted_data = sorted(unique_data, key=lambda x: (x[1], x[0]))
max_sequence = 1
current_sequence = 1
best_point = None
for i in range(1, len(sorted_data)):
if (sorted_data[i][1] == sorted_data[i - 1][1]
and sorted_data[i][0] == sorted_data[i - 1][0] + 1):
current_sequence += 1
if current_sequence > max_sequence:
max_sequence = current_sequence
best_point = sorted_data[i][1]
else:
current_sequence = 1
print(max_sequence, best_point)
