Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 26. Информатика. ЕГЭ. Шастин. 7.05.2025
- Просмотры: 931
- Изменено: 11 мая 2025
(Л. Шастин) Частная клиника работает круглосуточно, в режиме 24/7. В течение суток в клинике проводятся медицинские приёмы, каждый из которых характеризуется временем начала и окончания (в миллисекундах, прошедших с начала суток). Считается, что в миллисекунды начала и конца приема он ещё идет. Необходимо проанализировать загруженность врачей за сутки и определить периоды простоя, то есть такие отрезки времени, когда ни один приём не проходил.
Входной файл содержит время начала и конца каждого приема (в мс) в течение суток. Определите, сколько периодов простоя было в течение суток, и укажите их суммарную длительность (в мс).
Входные данные
В первой строке входного файла находится натуральное число \(N\) \((N < 100~000)\) — количество приемов, проведенных за сутки. Следующие \(N\) строк содержат пары чисел, обозначающих соответственно время начала и время конца приёма (все числа натуральные, меньшие \(86400000).\)
Запишите в ответе два натуральных числа: сначала найденное количество периодов простоя, а затем их суммарную длительность (в мс).
Типовой пример организации данных во входном файле
\(6\)
\(10 \,\, 50\)
\(100 \,\, 150\)
\(110 \,\, 155\)
\(120 \,\, 160\)
\(130 \,\, 170\)
\(151 \,\, 170\)
При таких исходных данных и длительности работы клиники в \(200\) мс было три периода простоя: в отрезки времени с \(0\) по \(9\) мс, с \(51\) по \(99\) мс и с \(171\) по \(199\) мс. Их суммарная длительность равна \((10 - 0) + (100 - 51) + (200 - 171) = 88.\) Ответ для примера: \(3 \,\, 88.\) Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Решение:
Python
fd = open('26.txt')
N = int(fd.readline())
intervals = []
for _ in range(N):
beg, end = map(int, fd.readline().split())
intervals.append([beg, end])
intervals.sort()
q, prost = 0, 0
beg, end = intervals[0][0], intervals[0][1]
if beg > 0:
q += 1
prost += beg
for p in range(1, len(intervals)):
if intervals[p][0] - end > 1:
q += 1
prost += intervals[p][0] - end - 1
beg, end = intervals[p][0], max(end, intervals[p][1])
if end < 86_400_000 - 1:
q += 1
prost += 86_400_000 - 1 - end
print(q, prost)
Ответ: \(36 \,\, 35834\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


