AT_rcl_contest_2020_final_b ハイパーお掃除ロボット
题目描述
现有一个 $N \times N$ 的网格,第 $i$ 行第 $j$ 列的单元格用 $(i, j)$ 表示。
每个单元格上覆盖着一个纸片,上面写着从 `A` 到 `Z` 一个字母。而网格中的某个单元格内放有一个球形清洁机器人 X,其余 $P$ 个单元格放有柱子。
你的任务是在最多 $M$ 次操作内,通过移动柱子和滚动机器人,帮助机器人收集纸片。具体操作如下:
- **移动柱子**:可以将一个柱子移动到另一个空格中,但不能移到有机器人或其它柱子的单元格上。
- **滚动机器人**:可以将机器人向上下左右某个方向滚动。
- 机器人会沿着指定方向一直滚动,直至撞到柱子或网格边界。若撞到柱子,机器人将在该柱子前一格停下;如果没有柱子,机器人则停在网格离边界最近的一个单元格。
- 停止后,若该单元格上有纸片,机器人会立即收集。已收集的纸片若再遇到,则不会再次收集。
一旦所有操作都完成,我们根据机器人收集纸片的顺序来计算一个分数。得分计算规则是:根据收集到的同连续字母的数目计算其平方之和。
(例如:纸片按 `A`, `B`, `B`, `B`, `A`, `B` 顺序收集,分数为 $1^2 + 3^2 + 1^2 + 1^2 = 12$。)
请合理规划移动,从而最大化您的得分。
每个测试用例的分数与总分计算方式如下:
- 每个测试用例结束后的分数即为该测试用例的得分。
- 总共有 50 个测试用例,所有测试用例得分之和即为本题的最终得分。
输入格式
输入格式如下:
> $N$ $P$ $M$ $row_{0}$ $\vdots$ $row_{N-1}$ $sheets_{0}$ $\vdots$ $sheets_{N-1}$
- $N$ 是网格的边长,固定为 40。
- $P$ 是柱子的数量,固定为 300。
- $M$ 是可用操作的最大次数,固定为 1000。
- $row_{i}$ 是一个长度为 $N$ 的字符串,其可能字符为 `o`, `x`, `-`。其中:
- `o` 表示 $(i, j)$ 处有机器人。
- `x` 表示 $(i, j)$ 处有柱子。
- `-` 表示 $(i, j)$ 处既无机器人又无柱子。
行中保证有且只有一个 `o`,并恰好有 $P$ 个 `x`。
- $sheets_{i}$ 是一个长度为 $N$ 的字符串,每个字符代表 `A` 到 `Z` 间的一个字母,表示对应位置纸片上的字母。
输出格式
输出最多 $M$ 行,每行表示一次操作:
- **移动柱子**:输出 `P`,然后依次输出柱子当前位置 $(r_1, c_1)$ 和目标位置 $(r_2, c_2)$,用空格分隔($0 \leq r_1, c_1, r_2, c_2 < N$)。若操作非法,即柱子不存在或目标位置有机器人/柱子,会被判为错误。
> P $r_1$ $c_1$ $r_2$ $c_2$
- **滚动机器人**:只需输出一个字符,代表滚动方向,`U`、`D`、`L`、`R` 分别表示向上、下、左、右。
```
[UDLR]
```
说明/提示
### 测试用例生成说明
测试用例由专门的生成器生成。
可以使用以下链接获取:
[生成器、测试器、样例输入数据](https://github.com/recruit-communications/rcl-contest-2020/tree/master/final_B/tester)
### 可视化工具
我们为结果提供了一个可视化工具,通过输入输出计算得分并可视化:
- 此工具在最新版本的桌面浏览器 Google Chrome 和 Mozilla Firefox 上已测。其它浏览器不保证正常工作。
- 可视化计算得分与实际比赛得分可能有所不同。最终成绩视 AtCoder 评分结果而定。
- 使用可视化工具导致的任何���失不予负责,请注意风险自担。
可视化工具及说明,可使用下列链接:
[可视化工具](https://github.com/recruit-communications/rcl-contest-2020/tree/master/final_B/visualizer)
### 示例解释
这是用于说明的简单示例,不满足所有约束。
程序的操作和说明如下:
初始状态:
```
----
-o--
x---
-x--
```
```
XYZX
ZAYX
ZBZB
XYZX
```
- 机器人从 $(1, 1)$ 向下滚动,会在 $(3, 1)$ 的柱子前一格 $(2, 1)$ 停下,收集一张 `B`:
```
D
```
```
----
----
xo--
-x--
```
`收集: B`
- 继续右滚到边界 $(2, 3)$,收集一张 `B`:
```
R
```
```
----
----
x--o
-x--
```
`收集: BB`
- 向左滚动,直到 $(2, 0)$ 的柱子前一格 $(2, 1)$ 停下,此处已收集过,无纸片收集:
```
L
```
```
----
----
xo--
-x--
```
`收集: BB`
- 将 $(2, 0)$ 的柱子移到 $(0, 1)$:
```
P 2 0 0 1
```
```
-x--
----
-o--
-x--
```
`收集: BB`
- 向上滚动,直到 $(0, 1)$ 的柱子前一格 $(1, 1)$ 停止,收集 `A`:
```
U
```
```
-x--
-o--
----
-x--
```
`收集: BBA`
最终得分为 $2^2 + 1^2 = 5$。
**本翻译由 AI 自动生成**