AT_masters2025_qual_a Ore Rolling (A)
题目描述
有一个用 $N \times N$ 的格子表示的洞窟。最左上角的格子的坐标为 $(0,0)$,从这里向下走 $i$ 格、向右走 $j$ 格后的位置坐标为 $(i,j)$。洞窟的四周被墙壁包围,无法走出洞窟。
洞窟内散落着岩石和 $M$ 种矿石。此外,洞窟内的 $M$ 个不同的格子上各有一个洞,第 $i$ 种矿石需要全部投入第 $i$ 个洞中。**岩石可以投入任意洞,也可以留在洞窟内不处理。**你最多可以进行 $10000$ 次如下操作:
1. 向上下左右相邻的格子移动。**即使目标格子上有洞、岩石或矿石也可以移动。**
2. 将当前位置的岩石或矿石搬运到上下左右相邻的格子。**目标格子不能已有其他岩石或矿石。目标格子可以是洞。**如果搬运到洞,岩石或矿石会掉入洞中并被移除。你的当前位置会变为搬运目标格子。
3. 将当前位置的岩石或矿石向上下左右某个方向滚动。被滚动的岩石或矿石会沿直线滚动,直到遇到岩石、矿石、墙壁而停止,或掉入洞中。你的当前位置不会改变。
滚动操作的详细规则如下:
1. 如果滚动方向相邻的格子是洞,岩石或矿石会掉入洞中并被移除。
2. 如果滚动方向相邻的格子有岩石、矿石,或超出 $N \times N$ 的范围,则在当前位置停止。
3. 若以上两种情况都不满足,则移动到相邻格子并重复处理。
滚动速度极快,因此在你下一步行动前,岩石或矿石必定已经停止或掉入洞中。
请你用尽量少的操作次数,将所有矿石投入对应的洞中。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $M$
> $C_0$
> $\vdots$
> $C_{N-1}$
- 棋盘大小 $N$ 在所有测试用例中均为 $N=20$。
- 矿石种类数 $M$,每个问题固定,详见“输入生成方法”部分。
- 对于每个 $i=0,1,\dots,N-1$,$C_i$ 是长度为 $N$ 的字符串,第 $j$ 个字符表示格子 $(i,j)$ 的初始状态:
- `@`:有岩石。
- `a`-`z`:有矿石。
- `A`-`Z`:有洞。
- `.`:什么都没有。
矿石和洞由大小写字母一一对应。例如,字母 `a` 表示的矿石应投入字母 `A` 表示的洞。只使用前 $M$ 个英文字母,同种矿石可能有多个,但同种洞只会有一个。
你初始时位于洞 `A` 所在的格子。
输出格式
第 $t$ 步的操作用操作类型编号 $a_t \in \{1,2,3\}$(1:移动,2:搬运,3:滚动)和方向字符 $d_t \in \{U,D,L,R\}$ 的对 $(a_t, d_t)$ 表示。例如,$(3, R)$ 表示将当前位置的岩石或矿石向右滚动。
请按如下格式输出:
> $a_0$ $d_0$
> $\vdots$
> $a_{T-1}$ $d_{T-1}$
说明/提示
### 得分
设输出的操作序列长度为 $T\ (\leq 10000)$,初始棋盘上的矿石总数为 $K$,成功投入正确洞的矿石数为 $A$,则得分如下:
- 若 $A=K$,得分为 $\mathrm{round}(10^6\times(1+\log_2{\frac{10000}{T}}))$。
- 若 $A