#P11113. [ROI 2024 Day 1] 2026

[ROI 2024 Day 1] 2026

题目背景

翻译自 ROI 2024 D1T2

一款新的游戏《2026》在一个 mmnn 列的矩形盘面上进行。盘面被划分为 m×nm \times n1×11 \times 1 的小格子。在一些格子上放置了大小为 1×11 \times 1 的方块,每个方块上写有一个英文字母。

你需要进行 qq 次操作,每次操作都是将所有方块向一个方向移动到底。因此,操作序列由一个长度为 qq 的字符串 ss 给出,字符串中每个字符表示一个方向:L 表示向左移,R 表示向右移,U 表示向上移,D 表示向下移。

具体操作与游戏《2048》相类似:在棋盘上,只要有一个方块在指定方向上相邻的格子是空的,该方块就会移动到该空格子上,包括它后面的那些方块也会连带着向那个方向一起移动,直到前方没有空格。

题目描述

给出棋盘的初始状态和操作序列,请确定所有操作执行完成后盘面的状态。

输入格式

输入包含多组数据。

  • 第一行输入一个整数 tt ,表示测试数据的组数(1t2000001 \le t \le 200 000)。
  • 对于每组数据:
    • 第一行输入整数 mmnn,代表盘面的大小(1m,n1061 \le m, n \le 10^61m×n1061 \le m \times n \le 10^6)。
    • 接下来的 mm 行,输入盘面的初始状态:
      • 其中的第 ii 行(1im1 \le i \le m)包含一个长度为 nn 的字符串 ai1ai2aina_{i1}a_{i2}\dots a_{in},表示第 ii 行的盘面状态。
      • 每个字符 aija_{ij} 要么是小写英文字母(从 az),要么是点号 .。如果 aija_{ij}.,则表示第 ii 行第 jj 列的格子为空,否则表示该格子上有一个标有字母 aija_{ij} 的方块。
    • 最后一行输入一个字符串 ss,由 qq 个字符组成,表示操作的序列(1q1061 \le q \le 10^6)。每个字符都是 LRUD 之一。

所有测试数据中 m×nm \times n 的总和不超过 2×1062 \times 10^6qq 的总和不超过 2×1062 \times 10^6

输出格式

对于每组数据,输出执行完所有操作后的盘面,格式与输入相同。

4
4 4
.a.b
..e.
....
.cd.
LRU
1 1
.
UULLRRDD
1 6
.a.aa.
LLURDDD
5 7
.ba.b..
ac..c.d
e......
....da.
d.eae..
DLDDRULRRR
..ab
..ce
...d
....
.
...aaa
dceebab
...aeac
.....ad
......d
.......

提示

样例解释:

在第一组输入数据中,盘面最初看起来是这样的:

第一次操作将所有方块向左移动。接着,盘面会变成这样:

第二次操作将所有方块向右移动。接着,盘面会变成这样:

第三次,也是最后一次操作将所有方块向上移动。所有操作结束后,盘面会变成这样:

子任务 分值 特殊性质
11 99 t=1,q=1,n,m100t=1,q=1,n,m\le100
22 77 sis_i 只可能为 LR
33 1313 mnq107\sum mnq\le10^7
44 1414 sis_i 只可能为 LRU
55 1212 棋盘上所有字母都是 amq107\sum mq\le10^7
66 1111 棋盘上所有字母都是 a
77 99 棋盘初始状态是“阶梯状”的,具体地,第 ii 行仅最左侧恰有 i1i-1 个字母
88 1414 ss 是重复若干次的 LURD
99 1111