15. Yandex Cells

Не решаласьСложная

Команда Яндекс.devtools разрабатывает редактор таблиц. Вам поручили написать модуль, обрабатывающий запросы объединения и разделения ячеек.

Таблица состоит из rowrow строк, пронумерованных от 11 до rowrow, и colcol столбцов, пронумерованных от 11 до colcol. Назовём \textit{элементарной ячейкой} область таблицы, находящуюся на пересечении некоторой строки и некоторого столбца. Каждая элементарная ячейка однозначно задаётся парой координат (x,y)(x, y), где xx — номер строки, в которой находится элементарная ячейка, а yy — номер столбца, в которой находится элементарная ячейка. В каждый момент времени таблица разбита на непересекающиеся \textit{ячейки}. Ячейкой является непустая прямоугольная область таблицы, образованная объединением некоторого множества элементарных ячеек. Более формально любая ячейка задаётся четвёркой чисел (lx,rx,ly,ry)(l_x, r_x, l_y, r_y) и состоит из объединения всех элементарных ячеек с координатами (x,y)(x, y) такими, что lxxrxl_x \leq x \leq r_x и lyyryl_y \leq y \leq r_y.

Для удобства работы с таблицами для каждой таблицы существует её ASCII-представление. ASCII-представление таблицы состоит из символов -, |, + и пробела. Для каждой строки фиксируется высота hih_i, а для каждого столбца фиксируется ширина wiw_i. ASCII-представлением таблицы является матрица из символов с mrow=(i=1rowhi)+row+1m_{row} = (\sum_{i = 1}^{row} h_i) + row + 1 строками, пронумерованными от 11 до mrowm_{row}, и mcol=(i=1colwi)+col+1m_{col} = (\sum_{i = 1}^{col} w_i) + col + 1 столбцами, пронумерованными от 11 до mcolm_{col}. Ячейке, заданной четвёркой чисел lx,rx,ly,ryl_x, r_x, l_y, r_y, соответствует подматрица матрицы символов, состоящая из символов с координатами (p,q)(p, q) такими, что (i=1lx1hi)+lx+1p(i=1rxhi)+rx(\sum_{i = 1}^{l_x - 1} h_i) + l_x + 1 \leq p \leq (\sum_{i = 1}^{r_x} h_i) + r_x и (i=1ly1wi)+ly+1q(i=1rywi)+ry(\sum_{i = 1}^{l_y - 1} w_i) + l_y + 1 \leq q \leq (\sum_{i = 1}^{r_y} w_i) + r_y.

Назовём элемент матрицы с координатами (p,q)(p, q) горизонтальным разделителем, если выполнено одно из следующих условий:

  • Хотя бы один из элементов (p,q1)(p, q - 1), (p,q+1)(p, q + 1) не существует (то есть q1=0q - 1 = 0 или q+1=mcol+1q + 1 = m_{col} + 1).
  • Элементы (p,q1)(p, q - 1) и (p,q+1)(p, q + 1) существуют и принадлежат различным ячейкам.

Назовём элемент матрицы с координатами (p,q)(p, q) вертикальным разделителем, если выполнено одно из следующих условий:

  • Хотя бы один из элементов (p1,q)(p - 1, q), (p+1,q)(p + 1, q) не существует (то есть p1=0p - 1 = 0 или p+1=mrow+1p + 1 = m_{row} + 1).
  • Элементы (p1,q)(p - 1, q) и (p+1,q)(p + 1, q) существуют и принадлежат различным ячейкам.

Назовём элемент матрицы с координатами (p,q)(p, q) \textit{крестообразным разделителем}, если он не принадлежит ни одной ячейке и среди четырёх элементов (p1,q)(p - 1, q), (p,q1)(p, q - 1), (p+1,q)(p + 1, q) и (p,q+1)(p, q + 1) найдётся хотя бы один горизонтальный и вертикальный разделитель.

Символ, соответствующий элементу матрицы с координатами (p,q)(p, q), определяется следующими правилами:

  • Если элемент матрицы принадлежит некоторой ячейке, то он обозначается пробелом.
  • Если элемент матрицы является горизонтальным разделителем, но не является крестообразным разделителем, то он обозначается символом |.
  • Если элемент матрицы является вертикальным разделителем, но не является крестообразным разделителем, то он обозначается символом -.
  • Если элемент матрицы является крестообразным разделителем, то он обозначается символом +.

На вход модуль принимает ASCII-описание таблицы. Некоторые клетки уже могут быть объединены.

Затем к модулю поступает qq запросов одного из двух типов:

  • split pos — разделить объединенную ячейку, содержащую элементарную ячейку с координатой pos на элементарные ячейки.

    • Если ячейка с координатой pos элементарная, то модуль должен вывести Can not split elementary cell
    • Иначе модуль должен разделить данную ячейку на элементарные и вывести Split onto NUM cells, где NUM — количество образованных элементарных ячеек.
  • merge pos1 pos2 — объединить ячейки, содержащие элементарные ячейки с координатами pos1 и pos2 соответственно

    • Если данные элементарные ячейки содержатся в одной и той же объединенной ячейке, то модуль должен вывести Can not merge cell with itself
    • Иначе если эти объединенные ячейки выровнены горизонтально (левая граница одной ячейки полностью совпадает с правой границей другой ячейки), то модуль должен объединить их и вывести Merged horizontally-aligned cells
    • Иначе если эти объединенные ячейки выровнены вертикально (нижняя граница одной ячейки полностью совпадает с верхней границей другой ячейки), то модуль должен объединить их и вывести Merged vertically-aligned cells
    • Иначе модуль должен вывести Can not merge unaligned cells

После вывода статуса каждого запроса который изменил таблицу модуль должен вывести и полученную таблицу.

Формат ввода

Первая строка содержит два целых числа mrowm_{row} и mcolm_{col} (3mrow,mcol3 \le m_{row}, m_{col}; mrow×mcol104m_{row} \times m_{col} \le 10^4) — количество строк и столбцов, задающих ASCII-описание таблицы.

Следующие mrowm_{row} строк содержат по mcolm_{col} символов каждый и задают ASCII-описание таблицы.

Следующая строка содержит целое число rowrow (1rowmrow121 \le row \le \lfloor\frac{m_{row} - 1}{2}\rfloor) — количество строк таблицы.

Следующая строка содержит rowrow целых чисел hih_i (1hi1 \le h_i; i=1rowhi+row+1=mrow\sum_{i = 1}^{row}{h_i} + row + 1 = m_{row}) — высоты строк таблицы.

Следующая строка содержит целое число colcol (1mmcol121 \le m \le \lfloor\frac{m_{col} - 1}{2}\rfloor) — количество столбцов таблицы.

Следующая строка содержит colcol целых чисел wiw_i (1wi1 \le w_i; i=1colwi+col+1=mcol\sum_{i = 1}^{col}{w_i} + col + 1 = m_{col}) — ширины столбцов таблицы.

Следующая строка содержит целое число qq (1q1031 \le q \le 10^3) — количество запросов к модулю.

Следующие qq строк содержат запросы к модулю в формате, указанном выше.

Координаты ячейки cc описываются как colcrowccol_crow_c, где rowcrow_c — номер строки (1rowcrow1 \le row_c \le row), а colccol_c — номер столбца, столбцы нумеруются так:

A, B, C, , Z, AA, AB, AC, , AZ, BA, , AAA, AAB, A,\ B,\ C,\ \ldots,\ Z,\ AA,\ AB,\ AC,\ \ldots,\ AZ,\ BA,\ \ldots,\ AAA,\ AAB,\ \ldots

Формат вывода

Для каждого запроса выведите его статус и в случае его успешного завершения таблицу, получившуюся в результате применения этого запроса.

Ограничения

Ограничение времени

1 с

Ограничение памяти

512 МБ

Пример 1

Ввод
5 11
+--+------+
|  |      |
+--+----+-+
|       | |
+-------+-+
2
1 1
3
2 4 1
6
merge B1 A2
merge A2 C2
merge A2 B2
split A1
split C2
merge A1 A2
Вывод
Can not merge unaligned cells
Merged horizontally-aligned cells
+--+------+
|  |      |
+--+------+
|         |
+---------+
Can not merge cell with itself
Can not split elementary cell
Split onto 3 cells
+--+------+
|  |      |
+--+----+-+
|  |    | |
+--+----+-+
Merged vertically-aligned cells
+--+------+
|  |      |
|  +----+-+
|  |    | |
+--+----+-+

Теги

Нужно войти, чтобы отправить решение.Войти