eolymp
bolt
Try our new interface for solving problems
Məsələlər

Замощение домино

Замощение домино

В этой задаче Вам необходимо трансформировать одно замощение прямоугольника костями домино в другое путем перемещения домино по циклам. Рассмотрим прямоугольную сетку размера \textbf{h} × \textbf{w}. Кость домино (или просто домино) представляет собой прямоугольный блок, который можно положить на любые две ячейки сетки, имеющих общую сторону. Замощением сетки называется такой набор костей домино, что каждая ячейка сетки покрывается в точности одним домино из набора. Отметим, что кости домино не могут пересекать границу сетки. Вам заданы два замощения сетки: начальное и конечное. Ваша задача состоит в преобразовании первоначального замощения в конечное. Для достижения этого Вы можете совершать ходы. Один ход заключается в выборе цикла домино и движения вдоль этого цикла (формальное определение приводится ниже). Стоимость каждого хода равно количеству клеток в соответствующем цикле домино. Общая стоимость трансформаций равна сумме затрат на всех сделанных Вами ходах. Конечно, общая стоимость должна быть минимально возможной. Теперь перейдем к деталям. Определим цикл домино положительной длины \textbf{n} на заданном замощении. Рассмотрим циклическую последовательность \textbf{2n} различных ячеек такую что любые две рядом стоящие ячейки последовательности имеют общую сторону. "Циклическая" означает что первая и последняя ячейка последовательности считаются соседними. Итого имеется \textbf{2n} пар последовательных ячеек в такой последовательности. Покроем \textbf{n} пар ячеек \textbf{n} непересекающимися костями домино и получим цикл домино. Перемещение костей домино вдоль цикла изменяет замощение. Сначала \textbf{n} домино, покрывающие все \textbf{2n} ячейки, принадлежащие циклу, удаляются. Затем \textbf{n} новых непересекающихся костей домино добавляются для покрытия \textbf{n} других пар последовательных ячеек. Результирующий набор костей также является замощением. Напомним, что стоимость такого хода равна \textbf{2n}. \InputFile Первая строка содержит два целых числа \textbf{h} и \textbf{w} (\textbf{1} ≤ \textbf{h}, \textbf{w} ≤ \textbf{100}): высоту и ширину прямоугольной сетки. Каждая из следующих \textbf{h} строк содержит \textbf{w} символов и описывает начальное замощение. Каждый символ является одним из следующих: \begin{itemize} \item символ “\textbf{l}” указывает на левую часть кости домино, \item символ “\textbf{r}” указывает на правую часть кости домино, \item символ “\textbf{u}” указывает на верхнюю часть, \item символ “\textbf{d}” указывает на нижнюю часть. \end{itemize} Следующая строка содержит \textbf{w} знаков тире (“-”). Каждая из следующих \textbf{h} строк содержит \textbf{w} символов и описывает конечное замощение в том же формате. Гарантируется, что входные данные корректны: \begin{itemize} \item \textbf{h} и \textbf{w} выбраны таким образом, что замощение сетки \textbf{h}× \textbf{w} возможно \item каждый символ в каждом замощении гарантированно имеет соответствующего соседа в требуемом направлении \end{itemize} \OutputFile В первой строке выведите два числа: \textbf{m} - количество ходов, и \textbf{p } - общую стоимость преобразований. В то время как стоимость \textbf{p} должна быть минимальной, количество ходов \textbf{m} может быть произвольным. Следующие \textbf{m} строк должны описывать хода, по одному в строке. Ход вдоль цикла домино состоящего из \textbf{k} ячеек следует записать в виде \textbf{k r_1 c_1 r_2 c_2 ... r_k c_k}. Здесь \textbf{r_i} и \textbf{c_i} - координаты \textbf{i}-ой ячейки цикла. Числа в строке следует разделять одним или несколькими пробелами. Цикл можно начинать в любой точке и проходить в любом направлении. \Note В первом примере наименьшая общая стоимость равна \textbf{10}. Ее можно достичь одним ходом, который включает в себя \textbf{10} граничных ячеек сетки в циклическом порядке. Пять костей домино, покрывающих ячейки (\textbf{1}, \textbf{1}) и (\textbf{1}, \textbf{2}), (\textbf{1}, \textbf{3}) и (\textbf{1}, \textbf{4}), (\textbf{2}, \textbf{4}) и (\textbf{3}, \textbf{4}), (\textbf{3}, \textbf{3}) и (\textbf{3}, \textbf{2}), (\textbf{3}, \textbf{1}) и (\textbf{2}, \textbf{1}) убираются. После чего добавляются новые кости домино, покрывающие ячейки (\textbf{1}, \textbf{2}) и (\textbf{1}, \textbf{3}), (\textbf{1}, \textbf{4}) и (\textbf{2}, \textbf{4}), (\textbf{3}, \textbf{4}) и (\textbf{3}, \textbf{3}), (\textbf{3}, \textbf{2}) и (\textbf{3}, \textbf{1}), (\textbf{2}, \textbf{1}) и (\textbf{1}, \textbf{1}). Решение показано слева на рисунке. Отметим, что существуют и другие способы достичь конечного замощения. Справа показано не оптимальное решение. \includegraphics{https://static.e-olymp.com/content/3a/3ab4eadb68e89491affb8edde234e3670b0ea899.jpg} Во втором примере наименьшая общая стоимость равна \textbf{12}. Ее можно достичь передвигая домино по трем малым циклам, каждый из которых состоит из четырех ячеек. Решение показано ниже. \includegraphics{https://static.e-olymp.com/content/20/2086f525eb4b81e29e954c7d6c8362f96f41f4e9.jpg}
Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
3 4
lrlr
ulru
dlrd
----
ulru
dlrd
lrlr
Çıxış verilənləri #1
1 10
10  1 1  1 2  1 3  1 4  2 4  3 4  3 3  3 2  3 1  2 1
Mənbə 2014 Петрозаводск, Ivan Kazmenko Contest, Август 22, Задача D