AT_future_contest_2019_qual_a ばらばらロボット
题目描述
一个机器人将在一个棋盘上行走,而命令列表中包含了机器人的行动指令。在这个问题中,命令可以是三种字符:`S`、`L`、`R`,而命令列表则是由这些字符组成的字符串。
我们需要处理 $N$ 个长度为 $L$ 的命令列表。你的任务是设计一个 $M \times M$ 的棋盘($M = 29$),使得机器人在执行这 $N$ 个命令列表后,能够在尽可能多的不同位置停下。
机器人从棋盘中央的格子(从上到下第 $15$ 行,从左到右第 $15$ 列)开始,面朝上,并按照命令列表依次执行命令。每个命令的具体效果如下:
- `S`:沿当前方向前进 $1$ 格。
- `L`:向左旋转 $90$ 度。
- `R`:向右旋转 $90$ 度。
在棋盘的设计中,你可以使用以下几种类型的格子来影响命令效果:
- `.`:普通格子,命令会正常执行。
- `#`:墙壁格子,机器人无法进入。如果尝试进入,会停在当前格子。**棋盘的最外圈必须由墙壁格子构成。**
- `D`:双倍格子,此处的命令效果翻倍(相比原来,效果应用两次,中途经过的格子效果被忽略)。
- `T`:三倍格子,命令效果三倍(效果应用三次,忽略中途经过的格子)。
- `L`:特殊`L`格子,在此处执行`R`命令,效果如同在普通格子上执行`L`命令。
- `R`:特殊`R`格子,在此处执行`L`命令,效果如同在普通格子上执行`R`命令。
可自由使用任意数量的这些格子。
目标是设计一个棋盘,使得机器人在所有命令列表下,停留的位置尽可能多。评分细则如下:
1. 初始化棋盘上每个格子的 *停止计数* 为 $0$。
2. 执行每个命令列表,机器人会在执行结束后增加其所在格子的停止计数。
3. 根据停止计数,计算每个格子的得分:
- 停止计数为 $1$:格子得分 $10$ 分。
- 停止计数为 $2$:格子得分 $3$ 分。
- 停止计数为 $3$:格子得分 $1$ 分。
- 其他情况:得分 $0$ 分。
4. 总得分为所有格子的得分之和。
请构建一个得分最高的棋盘。
输入格式
输入包含以下数据:
> $ N $ $ M $ $ L $ $ S_1 $ $ S_2 $ $ : $ $ S_N $
输出格式
输出一个尽可能高得分的棋盘,以以下格式:
> $ T_1 $ $ T_2 $ $ : $ $ T_M $
在这里,$ T_i $ 是一个长度为 $ M $ 的字符串,只能包含以下字符:`.`, `#`, `D`, `T`, `L`, `R`。
进一步要求是,棋盘最外圈的所有字符(即 $ T_1, T_M $ 的字符和每个 $ T_i $ 的第一个与最后一个字符)必须为 `#`,且 $ T_{15} $ 的第 $ 15 $ 个字符不能为 `#`。
说明/提示
### 约束
- $ N = 500 $
- $ M = 29 $
- $ L = 300 $
- 各 $ S_i $ 是一个长度 $ L $ 的字符串。
- 在每个 $ S_i $ 中,`S` 出现概率 $ 50\% $,而 `L` 和 `R` 各出现概率 $ 25\% $。
### 评分
单个测试用例的得分按照描述中方法计算。
共有 $ 30 $ 个测试用例,所有测试用例得分之和为提交的总得分。
如果 example_01 以外的测试用例中存在任何不合法输出,则除了 example_01 以外的所有测试用例得分为 $ 0 $。
### 示例解释
**以下输入是个小规模示例,不满足整个约束条件。** 对于每个命令列表,机器人停止的位置如下,可以得到 $ 60 $ 分:
```
#######
#.5.1##
#.3642#
#.....#
#.....#
#.....#
#######
```
\[输入文���和输出示例请从此处下载(zip)\](https://img.atcoder.jp/future-contest-2019-qual/4c6cbaf25f6cba6dab44a006e3dc7c37.zip) 评分结果中的「example_01」即来自此数据。该数据也是评分对象之一。
**本翻译由 AI 自动生成**