Задача №489. Тупики
Разбор добавил Александр Чистяков
Реализуем структуру, описывающую тупик и характеризуемую номером тупика, а также моментом времени в который этот тупик освободится. Из двух тупиков меньшим будем считать тот, который освобождается раньше, а при равенстве моментов времени тот, у которого номер меньше. Создадим две кучи минимумов: первая (Free) хранит все свободные на данный момент времени тупики, а вторая (Engaged)- все занятые. (Объект, описывающий каждый из тупиков всегда будет лежать ровно в одной из куч) Для начала положим все тупики в кучу Free и обнулим время их освобождения. Теперь каждый из прибывающих поездов будем обрабатывать по следующему алгоритму: 1) Пока время освобождения минимального элемента из кучи Engaged меньше чем время прибытия обрабатываемого поезда, обнуляем его время освобождения и переносим из кучи Engaged в кучу Free. 2) Если куча Free пуста, то текущий поезд невозможно поставить ни в один из тупиков. Иначе берём наименьший тупик из кучи Free, записываем в качестве времени его освобождения время отправки текущего поезда, перемещаем этот тупик из кучи Free в кучу Engaged, в какой-нибудь массиве запоминаем куда поставили текущий поезд. Поскольку каждый из поездов занимает и освобождает свой тупик не более одного раза, то всего он один раз будет добавлен в кучу Engaged и не более одного раза возвращён в кучу Free. В сумме нам потребуется порядка N*log(K) операций на перемещение тупиков по кучам. Помимо этого за K*log(K) операций мы создаём кучу Free. Итоговая сложность алгоритма O((N+K)*log K) операций.
Есть K тупиков и расписание (время приезда и отъезда) электричек. Необходимо каждую электричку поставить в свободный тупик с минимальным номером.
Сдать: для сдачи задач необходимо войти в систему
1962
statement