Решение: Освобождение ячеек камеры хранения
На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке задано текущее время: через двоеточие два целых числа, соответствующие часам (от 00 до 23 — ровно 2 символа) и минутам (от 00 до 59 — ровно 2 символа). Во второй строке сообщается количество пассажиров N, которое не меньше 10, но не превосходит 1000. Каждая из следующих N строк имеет формат: <Фамилия> <время освобождения ячейки>, где <Фамилия> — строка, состоящая не более чем из 20 символов, а <время освобождения ячейки> задано через двоеточие двумя целыми числами, соответствующими часам и минутам. Фамилия и время освобождения ячейки разделены одним пробелом. Сведения отсортированы в порядке времени сдачи багажа. Требуется написать программу, выводящую фамилии пассажиров, которые в ближайшие 2 часа должны освободить ячейки, в хронологическом порядке освобождения ячеек.
Пример входных данных: 10:00; 3; Иванов 12:00; Петров 10:00; Сидоров 12:12. Результат: Петров, Иванов.
Решение по шагам
5 шаговТекущее время и время освобождения ячейки переводятся в количество минут от начала суток: часы умножаются на 60 и к результату прибавляются минуты.
$$t = 60h + m$$Пассажир подходит, если время освобождения находится от текущего момента до момента через 2 часа включительно.
$$t_{\text{тек}} \leq t_{\text{осв}} \leq t_{\text{тек}} + 120$$Для каждого подходящего пассажира сохраняются его фамилия и время освобождения. Так как исходные сведения отсортированы по времени сдачи багажа, а не по времени освобождения, найденные записи необходимо отсортировать по времени освобождения.
После сортировки выводятся только фамилии пассажиров, по одной в каждой строке. Например, при текущем времени 10:00 подходят времена 10:00 и 12:00, но не подходит 12:12.
Пример реализации на Python:
$$from sys import stdin lines = [line.strip() for line in stdin] current_h, current_m = map(int, lines[0].split(':')) current = current_h * 60 + current_m n = int(lines[1]) passengers = [] for line in lines[2:2 + n]: surname, time = line.split() h, m = map(int, time.split(':')) minutes = h * 60 + m if current <= minutes <= current + 120: passengers.append((minutes, surname)) passengers.sort() for minutes, surname in passengers: print(surname)$$Перевести время в минуты, отобрать записи с условием $t_{\text{тек}} \leq t \leq t_{\text{тек}} + 120$, отсортировать их по времени освобождения и вывести фамилии.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Сравнивать строки со временем лексикографически вместо перевода времени в минуты.
Не включать пассажира, освобождающего ячейку ровно через 2 часа.
Считать, что входные данные уже отсортированы по времени освобождения.
Выводить вместе с фамилией время или другие лишние данные.
Не учитывать, что граница ближайших 2 часов включает текущее время.