
Задача по теме: "Сортировки"
Входной файл содержит сведения о мероприятиях, в которых приглашён участвовать директор фирмы. Для каждого мероприятия указаны время начала и длительность его проведения (в минутах от начала суток). Если время начала одного мероприятия меньше времени окончания другого, то руководитель может принять участие только в одном из них. Если время окончания одного мероприятия совпадает со временем начала другого, то руководитель может принять участие в обоих мероприятиях (очно или дистанционно). Определите, в каком максимальном количестве мероприятий может принять участие руководитель и каков при этом максимально возможный перерыв между двумя последними мероприятиями.
Входные данные
В первой строке входного файла находится натуральное число N (N <= 1000) - количество заявок на проведение мероприятий. Следующие N строк содержат пары чисел, обозначающих время начала и длительность мероприятия. Каждое из чисел натуральное, не превосходящее 1440. Запишите в ответе два числа: максимальное количество мероприятий и самый длинный перерыв между двумя последними мероприятиями (в минутах).
Типовой пример организации данных во входном файле
5
20 120
90 20
147 43
150 30
120 20
При таких исходных данных можно провести максимум три мероприятия, например, мероприятия по заявкам 2, 3 и 5. Максимальный перерыв между двумя последними мероприятиями составит 10 мин., если состоятся мероприятия по заявкам 2, 4 и 5.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.


Решение:
С помощью Excel:
Создадим столбец с временем окончания путем сложения столбца "Время начала" и столбца "Длительность".
Отсортируем данные по столбцу "Время окончания" в порядке возрастания.
Посмотрим сколько мероприятий нам подходят (воспользуемся формулой ЕСЛИ: =ЕСЛИ(A2>=D1;C2;D1) и =ЕСЛИ(D1=D2;E1;E1+1), начиная со второй строки) и выберем последним мероприятием то, до которого перерыв больше (пролистаем вниз до первого элемента, который может последним мероприятием, и воспользуемся формулой =МАКС(A708:A1000) -D707-1).
Полное решение представлено в файле.
С помощью программы на языке программирования Python:
f = open("26 вар1.txt")
data = []
for s in f:
start, dur = map(int, s.split())
data.append([start + dur, start])
data.sort()
podoshli = []
last = []
zal = 0
for meropr in data:
if meropr[1] >= zal:
podoshli.append(meropr)
zal = meropr[0]
elif len(podoshli) == 26 and meropr[1] >= podoshli[-2][0] and meropr[1] >= podoshli[-1][-1]:
podoshli[-1] = meropr
print(podoshli[-1], podoshli[-2])
Данный код выполняет следующие действия:
- Открывает файл "26 вар1.txt" с помощью функции open() и сохраняет его в переменную f.
- Создает пустой список data, который будет использоваться для хранения данных из файла.
- Читает файл построчно с помощью цикла for s in f.
- Для каждой строки в файле, разделяет ее на два числа start и dur с помощью функции split() и преобразует их в целочисленный тип с помощью функции map(int, s.split()).
- Создает список [start + dur, start] и добавляет его в список data.
- Сортирует список data по возрастанию первого элемента каждого подсписка.
- Создает пустые списки podoshli и last, которые будут использоваться для хранения определенных значений.
- Инициализирует переменную zal со значением 0.
- Для каждого элемента meropr в списке data выполняет следующие действия:
- Если значение meropr[1] (начало операции) больше или равно значению zal, добавляет meropr в список podoshli и обновляет значение zal равным meropr[0] (конец операции).
- В противном случае, если длина списка podoshli равна 26 и значение meropr[1] больше или равно значению podoshli[-2][0] (конец предпоследней операции) и meropr[1] больше или равно значению podoshli[-1][-1] (начало последней операции), заменяет последний элемент списка podoshli на meropr.
- Выводит последний и предпоследний элементы списка podoshli с помощью функции print().
Ответ: 26 20
Сообщение об ошибке
Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!

МГ | Pro | ProMax | |
Практика на платформе | |||
Отслеживание прогресса обучения | |||
Двухуровневое домашнее задание после каждого вебинара | |||
Все материалы составлены экспертом ЕГЭ | |||
Персональный менеджер | |||
Личный куратор | |||
Разбор ошибок личным куратором | |||
Еженедельные созвоны с куратором для закрытия индивидуальных пробелов | |||
Составление индивидуального расписания |

счёта
средств
подтверждено!
Теперь вы можете приступить
к следующему уроку
курса по математике
замены
Для смены номера телефона
мы отправили Вам код по СМС,
введите его в поле ниже.
Электронная почта
На почту придет чек об оплатеНажимая кнопку "купить", Вы выражаете своё согласие с офертой оказания услуг и принимаете их условия
Здравствуйте!
Выберите информацию о себе ниже

Оплата прошла успешно!
