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

№ 26011. ЕГКР

В банке дистанционной проверяющей системы имеется более 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.

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.

with open('2611.txt') as file:
    N = int(file.readline())
    students = []
    for i in file:
        students.append(list(map(int, i.split())))

students.sort()

cnt = 1
ans = []
for i in range(N - 1):
    student1, student2 = students[i], students[i + 1]
    if student1[0] == student2[0]:
        if student1[1] == student2[1]:
            continue
        if abs(student2[1] - student1[1]) == 2:
            cnt += 1
        else:
            cnt = 1
    else:
        cnt = 1
    ans.append([cnt, student1[0]])

ans.sort(key=lambda x: (x[0], -x[1]))
print(ans[-1])
Разберём это задание на бесплатном пробном занятии

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

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