стереть
Класс
8 9 10 11
Нужно авторизоваться
Нужно авторизоваться
Нужно авторизоваться
Нет аккаунта?
При наличии аккаунта на платформе можно
Введите больше 6 символов
Проблемы со входом?
Введи последние 4 цифры номера, с которого
поступит звонок. Трубку брать не нужно.
Повторный звонок через
сек.
Добро пожаловать!
Зарегистрируйся и получи Демо мастер-группы на 10 дней по любимым предметам бесплатно.
Добро пожаловать!
Как тебя зовут?
Введите не меньше 2 символов
Привяжем номер телефона
Введите не меньше 2 символов
Привяжем номер телефона
Повторный звонок через
30 сек.
Теперь нужно подтвердить номер - введи последние 4 цифры номера, с которого поступит звонок. Трубку брать не нужно
Введите не меньше 2 символов
Придумаем пароль
Почти закончили! Теперь нужно создать надежный пароль
Введите не меньше 2 символов
Немного о тебе
В какой класс ты переходишь?
Укажи, какие предметы будешь или хочешь сдавать
Введите не меньше 2 символов
На почту 12345@mail.ru отправлена ссылка для сброса пароля.
OK
Информатика

Задача по теме: "Сортировки"

Информатика
Задание 26 Сортировки
Подсказка
За подсказку ты получишь лишь половину баллов
Использовать
Автор
Крылов С.С., Чуркина Т.Е. Информатика: единый государственный экзамен. — Москва: Издательство "Национальное образование", 2024. — 256 с. Материалы публикуются в учебных целях
Просмотры
738
banner-img

Входной файл содержит сведения о мероприятиях, в которых приглашён участвовать директор фирмы. Для каждого мероприятия указаны время начала и длительность его проведения (в минутах от начала суток). Если время начала одного мероприятия меньше времени окончания другого, то руководитель может принять участие только в одном из них. Если время окончания одного мероприятия совпадает со временем начала другого, то руководитель может принять участие в обоих мероприятиях (очно или дистанционно). Определите, в каком максимальном количестве мероприятий может принять участие руководитель и каков при этом максимально возможный перерыв между двумя последними мероприятиями.

 

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

В первой строке входного файла находится натуральное число N (N <= 1000) - количество заявок на проведение мероприятий. Следующие N строк содержат пары чисел, обозначающих время начала и длительность мероприятия. Каждое из чисел натуральное, не превосходящее 1440. Запишите в ответе два числа: максимальное количество мероприятий и самый длинный перерыв между двумя последними мероприятиями (в минутах).

 

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

5

20 120

90 20

147 43

150 30

120 20

При таких исходных данных можно провести максимум три мероприятия, например, мероприятия по заявкам 2, 3 и 5. Максимальный перерыв между двумя последними мероприятиями составит 10 мин., если состоятся мероприятия по заявкам 2, 4 и 5.

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

loading
Решение
single-task__solution-banner

Решение:

С помощью 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])

 

Данный код выполняет следующие действия:

  1. Открывает файл "26 вар1.txt" с помощью функции open() и сохраняет его в переменную f.
  2. Создает пустой список data, который будет использоваться для хранения данных из файла.
  3. Читает файл построчно с помощью цикла for s in f.
  4. Для каждой строки в файле, разделяет ее на два числа start и dur с помощью функции split() и преобразует их в целочисленный тип с помощью функции map(int, s.split()).
  5. Создает список [start + dur, start] и добавляет его в список data.
  6. Сортирует список data по возрастанию первого элемента каждого подсписка.
  7. Создает пустые списки podoshli и last, которые будут использоваться для хранения определенных значений.
  8. Инициализирует переменную zal со значением 0.
  9. Для каждого элемента meropr в списке data выполняет следующие действия:
  • Если значение meropr[1] (начало операции) больше или равно значению zal, добавляет meropr в список podoshli и обновляет значение zal равным meropr[0] (конец операции).
  • В противном случае, если длина списка podoshli равна 26 и значение meropr[1] больше или равно значению podoshli[-2][0] (конец предпоследней операции) и meropr[1] больше или равно значению podoshli[-1][-1] (начало последней операции), заменяет последний элемент списка podoshli на meropr.
  1. Выводит последний и предпоследний элементы списка podoshli с помощью функции print().

 


Ответ: 26 20

На экзамене это задание принесло бы тебе 2/2 баллов.
Решать еще

Сообщение об ошибке

Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!

Здравствуйте!

Выберите информацию о себе ниже

pay-success-img

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

pay-un-success-img

Оплата не прошла

Попробуйте снова