|
Menu |
|
Задача Лифт
| Файл входного файла: | elevator.in |
|---|---|
| Файл выходного файла: | elevator.out |
| Ограничение по памяти: | 64 MB |
| Ограничение по времени: | 2 s |
Описание
В N-этажном здании имеется лифт со следующей схемой работы:
- при нажатии кнопки вызова лифта на каком-нибудь этаже, номер этого этажа добавляется в очередь вызовов.
- если в момент вызова лифт стоит, и движение еще не происходило, или с момента остановки прошло не менее A секунд, то лифт начинает двигаться по направлению к этажу, с которого он вызван. Этот вызов будет считаться текущим;
- расстояние между двумя последовательными этажами лифт проходит за B секунд;
- если лифт проезжает этаж, номер которого есть в очереди вызовов, он мгновенно останавливается (этот момент будем считать моментом обработки соответствующего вызова);
- после остановки один экземпляр номера этажа удаляется из очереди вызовов, лифт стоит на месте в течение A секунд (время на высадку и посадку пассажиров), а затем продолжает движение к этажу текущего вызова;
- если лифт остановился на этаже текущего вызова, то текущим вызовом становится наиболее ранний необработанный вызов из очереди вызовов;
- если в момент начала движения приходит вызов с текущего этажа, то лифт опять останавливается.
Требуется определить моменты времени, в которые будут обработаны вызовы. Изначально лифт стоит на первом этаже.
Формат входных данных
На первой строке входного файла даны 4 целых числа: N - количество этажей, M - количество вызовов, A - количество секунд на высадку и посадку пассажиров, B - время проезда лифта между двумя этажами (1 <= N, M <= 10
5
, 1 <= A, B <= 100). Следующие M строк содержат по два целых числа:
T
i
- количество секунд, прошедших с момента времени 0 до i-го вызова, F
i
- этаж, с которого был сделан i-й вызов (1 <= T
i
<= 10
5
, 1 <= F
i
<= N, T
i
<= T
i+1
для всех i от 1 до M - 1). В случае, когда T
i
= T
i+1
i-й вызов считается сделанным раньше i+1-го. Числа на каждой строке разделены пробелами.
Формат выходных данных
Выведите моменты обработки вызовов (количество секунд, прошедших от момента времени 0 до обработки) в порядке, соответствующем порядку появления вызовов во входном файле, по одному на строке.
Примеры:
| ввод | вывод |
|---|---|
|
5 6 12 13
|
94
|
|
|
|
Powered by django, eJudge.
Обсуждение:
Начать обсуждение: