На соревнованиях по спортивному ориентированию каждый участник должен пройти маршрут, посещая контрольные точки. Все контрольные точки пронумерованы натуральными числами начиная с \(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.\)
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Решение:
Python
fd = open('26_23383.txt')
#fd = open('26.txt')
N = int(fd.readline())
cp = {}
for line in fd:
n, pt = map(int, line.split())
if cp.get(pt):
cp[pt].add(n)
else:
cp[pt] = set([n])
arr = []
for pt in cp:
sportsmen = sorted(list(cp[pt]))
qmax = 1
q = 1
for p1 in range(1, len(sportsmen)):
if sportsmen[p1] - sportsmen[p1 - 1] > 1:
qmax = max(qmax, q)
q = 1
else:
q += 1
qmax = max(qmax, q)
arr.append((q, -pt))
arr.sort(reverse=True)
print(arr[0][0], -arr[0][1])
Ответ: \(56 \,\, 30113\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене