ЗАДАЧИ
problems.ru |
О проекте
|
Об авторах
|
Справочник
Каталог по темам | по источникам | |
|
Задача 102948
УсловиеВ драматическом театре им. Пушкина к юбилею Александра Сергеевича решили поставить оперу «Евгений Онегин». Артисты театра обладают красивыми, но не очень сильными голосами. По этой причине руководство театра дало указание приобрести радиомикрофоны. В начале и в конце спектакля все артисты находятся за кулисами. Артисты выходят на сцену и покидают ее через правую или левую кулису. Для того, чтобы петь на сцене, артист берет с собой один микрофон. Артист может выходить на сцену с микрофоном (одним), даже если ему не надо петь в этом выходе. Взяв микрофон, артист не может оставить его на сцене или передать другому артисту. При уходе артиста за кулисы микрофон остается за соответствующей кулисой до тех пор, пока его снова не возьмет какой-либо артист, выходящий на сцену.Очередность выходов артистов на сцену и их уходов за кулисы указывается в режиссерском плане. Кроме того, в этом плане указывается, через какие кулисы выходит (или уходит) артист и поет ли он в данном выходе. Напишите программу, которая по заданному режиссерскому плану
определяет минимальное количество требуемых для постановки оперы
микрофонов, их начальное размещение по кулисам и для каждого выхода
указывает, брать или не брать микрофон.
РешениеСкачать архив тестов и решенийРассмотрим для начала упрощенный вариант задачи, когда каждый артист в каждом своем выходе на сцену поет. Решением тогда будет являться следующий «жадный» алгоритм. Предположим, что перед началом оперы ни с левой, ни с правой стороны микрофонов нет, зато есть «склад с микрофонами», с которого их можно брать в случае необходимости. В каждый момент времени все имеющиеся микрофоны можно подразделить на четыре класса (состояния): находящиеся на складе (Склад), за левой кулисой (Л), за правой кулисой (П) и на сцене (Сцена). Рассмотрим выход артиста на сцену. Пусть, для определенности, он выходит через левую кулису. Из каких микрофонов он может выбрать тот, в который будет петь? Либо из пребывающих в состоянии Л, либо из пребывающих в состоянии Склад. Если микрофонов в состоянии Л нет, то артисту ничего не остается, кроме как взять микрофон со склада. Если же имеется микрофон в состоянии Л, то нужно взять именно его. Действительно, перевести микрофон из состояния Склад в состояние Л можно в любой момент, поэтому состояние Склад является более выгодным, а микрофон в этом состоянии – более «дорогим». Выбранный артистом микрофон переходит в состояние Сцена до тех пор, пока артист не уйдет со сцены, после чего микрофон попадает в состояние Л или П в зависимости от того, через левую или правую кулису он вышел. Сказанное выше иллюстрирует рисунок. Стрелки изображают возможные переходы между состояниями, а символы 0 и – начальное количество микрофонов в каждом из состояний. Ясно, что описанный алгоритм минимизирует количество микрофонов, взятых со склада. Если в процессе его работы L микрофонов было переведено со склада в состояние Л, а R микрофонов – в состояние П, то это и есть требуемое начальное размещение микрофонов по кулисам, а суммарное число микрофонов, необходимое для постановки оперы, равняется L + R. Вернемся теперь к первоначальной постановке задачи. У нас появились артисты, которые выходят на сцену, но не поют. Те из них, которые выходят и уходят через одну и ту же кулису, должны просто игнорироваться – давать им микрофоны бессмысленно. Оставшихся же можно использовать для «переброски» микрофонов с левой стороны на правую или наоборот. При этом «непоющий» артист имеет шанс взять лишь тот микрофон, который в момент его выхода через одну из кулис находится с той же стороны. (Брать микрофон со склада для переноса бессмысленно.) Рассмотрим, для определенности, выход «непоющего» артиста через левую кулису. Пусть имеется микрофон в состоянии Л. В зависимости от того, возьмет его артист или нет, микрофон может оказаться либо за левой кулисой, либо на сцене в процессе переноса с левой стороны на правую. По прошествии некоторого времени рассматриваемый артист уйдет со сцены через правую кулису, в результате чего микрофон может оказаться за любой из двух кулис. Итак, для каждого микрофона рассматриваем множество мест, где он в
данный момент может находиться (в скобках указаны названия
соответствующих состояний): Решение нашей задачи – естественное обобщение изложенного выше решения для упрощенного варианта и тоже, в некотором смысле, может быть названо «жадным алгоритмом». Последовательно просматриваем режиссерский план, содержащий все выходы/уходы артистов со сцены в хронологическом порядке. Разберем сначала случай выхода артиста на сцену. Как и прежде, ограничимся лишь случаем выхода через левую кулису. 1. Если артист в данном выходе не поет, то: 2. Если артист поет в данном выходе, то: Выбранный в случае 2 микрофон переходит из состояния Л в состояние
Сцена. Корректность описанных правил легко вытекает из того, что состояние
Склад более выгодно, чем состояние Л, П, которое выгоднее состояния Л, Л>П,
которое, в свою очередь, выгоднее состояния Л.
Итак, алгоритм решения достаточно ясен. Храним количество микрофонов для состояний с номерами 3-5 из приведенного выше списка, а для состояний с номерами 6-7 – еще и время достижения противоположной кулисы. При использовании элементарных структур данных получаем алгоритм со сложностью O(KN). Если же реализовать структуру данных, аналогичную используемой в сортировке деревом [Вирт 89; п. 2.3.2], то можно добиться сложности O(K log N). Источники и прецеденты использования |
© 2004-...
МЦНМО
(о копирайте)
|
Пишите нам
|