Задание 26. Информатика. ЕГЭ. Статград. 01.04.2025-1

Просмотры: 75
Изменено: 1 апреля 2025

Система наблюдения ежеминутно фиксирует вход и выход сотрудников из офиса (в минутах, прошедших от начала суток). Считается, что в моменты фиксации входа и выхода сотрудник находится в офисе. Нулевая минута соответствует моменту начала рабочего дня в офисе, который длится \(24\) ч в сутки без перерыва. Менеджер компании анализирует данные системы наблюдения за прошедшие сутки, и выявляет непересекающиеся отрезки времени наибольшей длины, в течение которых число сотрудников, находящихся в офисе, не изменялось. Входной файл содержит время входа и выхода каждого сотрудника компании. Определите минуту, когда в предпоследний раз за сутки число сотрудников поменялось, и укажите наибольшую длину отрезка времени, когда количество сотрудников оставалось неизменным.

Входные данные

В первой строке входного файла находится натуральное число \(N\) \((N \leqslant 100~000)\) — количество сотрудников компании. Следующие \(N\) строк содержат пары чисел, обозначающих соответственно время входа и время выхода сотрудника (все числа натуральные, не превышающие \(1440\)).

Запишите в ответе два натуральных числа: сначала минуту, когда в предпоследний раз за сутки число сотрудников поменялось, а затем наибольшую длительность промежутка времени, при котором количество сотрудников оставалось неизменным.

Типовой пример организации данных во входном файле

\(5\)
\(10 \, 1070\)
\(230 \, 1070\)
\(240 \, 1070\)
\(1070 \, 1400\)
\(1071 \, 1400\)

При таких исходных данных в течение суток было \(7\) промежутков времени, когда число сотрудников не менялось: \((0, \, 10),\) \((10, \, 230),\) \((230, \, 240),\) \((240, \, 1070),\) \((1070, \, 1071),\) \((1071, \, 1400),\) \((1400, \, 1440).\) Наибольшей длиной из этих отрезков является число \(830.\) В \(1071\) минуту в предпоследний раз за сутки изменилось число сотрудников.

Файл с данными

Решение:

Python


base = ''
fd = open(base + '26.txt')
N = int(fd.readline())
tt = {i: 0 for i in range(1441)}
for line in fd:
    i, o = map(int, line.split())
    for x in range(i, o+1):
        tt[x] += 1
chg = []
max_time = 0
tmp = 1
for x in range(1440):
    if tt[x] == tt[x+1]:
        tmp += 1
    else:
        max_time = max(max_time, tmp)
        tmp = 1
        chg.append(x+1)
print(chg[-2], max_time)

Ответ: \(1432 \,\, 15\)