Куча автомобилей выстроилась в очередь на 4-полосной остановке, ожидающей продолжения. Все смущены тем, кто идет дальше, кто идет в какую сторону и т. Д. Очевидно, что он неоптимален.
Ваша работа заключается в том, чтобы оптимально планировать движение на остановке.
В качестве входных данных вы получаете 4 строки запросов на поворот, по одному для каждого из четырех основных направлений. Каждый запрос либо L
для левого, S
для прямого или R
для правого.
LLSLRLS
SSSRRSRLLR
LLRLSR
RRRLLLL
Первый ряд - это очередь у северного въезда на перекресток. Первая машина в очереди хочет повернуть налево (то есть выехать на восток). Последующие строки предназначены для входов на восток, юг и запад. Таким образом, первая машина, идущая с Запада, хочет выехать на юг.
Трафик движется в серии шагов. На каждом этапе вы должны выбрать подмножество автомобилей в начале их строк, чтобы продолжить. Выбранные автомобили не должны мешать друг другу. Два автомобиля мешают, если они выезжают в одном направлении или если они должны пересечь путь друг друга (с учетом стандартных правил правого вождения). Таким образом, две противоположные машины, желающие ехать прямо, могут ехать на одном шаге. Так что пусть 4 машины все желающие повернуть направо. Две противоположные машины могут одновременно повернуть налево.
Ваша задача состоит в том, чтобы запланировать пересечение в минимальной последовательности шагов. Для каждого шага выведите строку с указанием направления (ей) компаса поступающих автомобилей. Для приведенного выше примера минимальное расписание составляет 14 шагов. Один минимальный график:
N [L from North]
E [S from East]
E [S from East]
E [S from East]
NESW [L from North, R from East, L from South, R from West]
NE [S from North]
EW [R from East]
NESW [L from North, R from East, L from South, R from West]
W [L from West]
EW [L from East, L from West]
NESW [R from North, L from East, R from South, L from West]
NES [L from North, R from East, L from West]
NS [S from North, S from South]
SW [R from South, L from West]
Ваша программа должна иметь возможность обрабатывать 50 автомобилей в каждой строке менее чем за 1 минуту. Ввод 4 строк и вывод расписания может быть любым удобным для вас языком.
Кратчайшая программа выигрывает.
Более крупный пример:
RRLLSSRLSLLSSLRSLR
RLSLRLSLSSRLRLRRLLSSRLR
RLSLRLRRLSSLSLLRLSSL
LLLRRRSSRSLRSSSSLLRRRR
который требует минимум 38 раундов. Одно из возможных решений:
E
EW
E
ESW
S
NS
ES
NESW
NSW
ESW
ES
NSW
NS
NS
NW
EW
NSW
NS
EW
NES
EW
NSW
NE
E
NE
EW
E
E
EW
EW
EW
W
ESW
NSW
NSW
NS
NSW
NEW