В банке дистанционной проверяющей системы имеется более 100 000 заданий. Все задачи пронумерованы начиная с единицы. Эти задания в течение учебного периода решают участники различных курсов. Каждому студенту при регистрации присваивается уникальный идентификатор - натуральное число, не превышающее 1 000 000. Студент может сдать несколько различных правильных решений одной задачи, при этом в зачёт идёт только одно из них.
Преподаватель сделал выгрузку результатов за некоторый период времени и выбрал студента, который решил наибольшее количество
задач из банка через одну (одну решил, следующую нет и т.д.).
Определите идентификационный номер студента, который решил наибольшее количество задач через одну, и количество решённых им задач. Если несколько студентов решили одинаковое максимальное количество задач, то укажите студента с наименьшим идентификационным номером.
Входные данные
В первой строке входного файла находится число N - количество зачтённых решений (натуральное число, не превышающее 60 000) за некоторый период времени. Каждая из следующих N строк содержит два натуральных числа, не превышающих 1 000 000: идентификатор студента и номер правильно решённой задачи.
Выходные данные
Два целых неотрицательных числа: наименьший идентификационный номер студента и наибольшее количество успешно решённых задач через одну.
Типовой пример организации входных данных
9
40 3
60 33
60 33
50 124
50 126
50 128
40 4
50 72
50 126
Для приведённого примера студент с идентификационным номером 50 решил наибольшее количество задач через одну (3 задачи).
Ответом является пара чисел: 50; 3.
Решение:
Решение на Python:
with open('E:/10/26_21719.txt') as f:
N = int(f.readline())
students = {}
for _ in range(N):
student_id, task = map(int, f.readline().split())
if student_id not in students:
students[student_id] = set()
students[student_id].add(task)
best_id = 0
best_count = 0
for student_id in students:
tasks = sorted(students[student_id])
max_chain = 1
current = 1
for i in range(1, len(tasks)):
if tasks[i] - tasks[i - 1] == 2:
current += 1
else:
current = 1
if current > max_chain:
max_chain = current
if max_chain > best_count:
best_count = max_chain
best_id = student_id
elif max_chain == best_count:
best_id = min(best_id, student_id)
print(best_id, best_count)
Ответ: 10135 42