ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 26021. Основная волна

На соревнованиях по спортивнориентированию каждый участник должен пройти маршрут, посещая контрольные точки. Все контрольные точки пронумерованы натуральными числами начиная с 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)
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие