#P11864. 「o.OI R1」α+β Problem

「o.OI R1」α+β Problem

题目背景

机器人小 α\alpha 喜欢做游戏,机器人小 β\beta 喜欢玩游戏。

题目描述

现在,它们正在玩一个叫作推箱子的游戏!

机器人小 β\beta 为关卡制定了一个用字符串表示的移动路径:

字符 含义
W 让机器人前进一格
S 让机器人后退一格
A 让机器人左转
D 让机器人右转

身为机器人小 α\alpha,你需要构造一个 n×mn\times m 的地图:

字符 含义
| 机器人无法穿过的墙壁
X 机器人最开始在的位置
S 箱子最开始所在的位置
. 空地

注意每个位置的东西只能是以上四种之一。

机器人的初始位置是给定的,方向朝上,地图外都是墙。

β\beta 完成移动后,所有箱子都必须移动过,小 α\alpha 需要让这个地图的箱子数最多,且小 β\beta 每步操作都合法。

以下给出所有不合法的操作:

操作 不合法情况
W 机器人前方是墙
机器人前方两格都是箱子
机器人前方两格分别是箱子和墙
S 机器人后方是箱子或墙

α\alpha 需要一份程序来完成这份工作。

输入格式

本题有多组数据。

第一行一个正整数 TT 表示数据组数。

对于每组数据:

  • 第一行两个整数 n,mn,m
  • 第二行三个整数 x,y,kx,y,k
  • 第三行一个长度为 kk 的字符串 ss

输入的数据含义如下:

  • nnmm 代表需要构造的地图的大小为 nnmm 列。
  • xxyy 代表机器人的初始位置在从上往下第 xx 行从左往右第 yy 列。
  • kk 代表移动路径的长度,ss 代表移动路径。

本题数据量较大,请使用较快的读写方式。

输出格式

对于每组数据,你需要给出一个 n×mn\times m 的地图代表你构造的地图,格式如题目描述所述。

所有最优的答案都可以得分。

输入数据 1

1
3 4
2 2 17
DWSAWDWSSDWAWDWAW

输出数据 1

..S.
SXS.
..S.

输入数据 2

1
3 4
3 4 9
WSAWWDWDW

输出数据 2

|.|.
|SSS
..SX

输入数据 3

1
3 4
2 1 8
DWASDWAW

输出数据 3

||.|
XS.|
|.S.

输入数据 4

2
5 4
5 1 9
WDWAWDWAW
5 19
5 8 12
DDSAADDADADW

输出数据 4

....
..S.
.SS.
SS..
X...
.........||||||||||
.........||......||
||||||...||......||
||..||...||......||
||||||.X.||||||||||

提示

部分样例有其他正确答案。

「数据范围」

本题开启 Special Judge 与捆绑测试。

一个测试点内,如果对于每组数据你的箱子数是最多的,且方案合法,你才能获得该测试点的分数。

只有通过一个子任务内的所有测试点才能得到该子任务的分数。

对于所有测试数据,保证:

  • 1n,m20001\leq n,m\leq 20001nm4×1061\leq \sum nm\leq 4\times 10^6
  • 1xn1\leq x\leq n1ym1\leq y\leq m
  • 1k,k1061\leq k,\sum k\leq 10^6
  • si{W,A,S,D}s_i\in\{\texttt{W},\texttt{A},\texttt{S},\texttt{D}\}
  • β\beta 的移动在空旷地图下一定合法。
子任务 n,mn,m nm\sum nm k\sum k 特殊性质 分值
00 4\leq4 40\leq 40 100\leq100 1010
11 =45=45 =2025=2025 103\leq10^3 A
22 200\leq200 4×104\leq 4\times 10^4 2020
33 1000\leq1000 2×106\leq 2\times 10^6 106\leq10^6 B 1515
44 C 2020
55 2000\leq2000 4×106\leq 4\times 10^6 2525
  • 特殊性质 A:前进和后退的总次数不超过 2020 次,且 x=y=23x=y=23
  • 特殊性质 B:si{W,A,D}s_i\in\{\texttt{W},\texttt{A},\texttt{D}\},且只会朝两个方向前进。
  • 特殊性质 C:可放箱子的最大数量为 0011

尽管比赛中不会返回,我们仍将告诉你 Special Judge 会返回的对应信息,优先级递减。

  • Error: 1:出现规定以外的字符。
  • Error: 2:出生点不在正确的位置。
  • Error: 3:机器人无法前进。
  • Error: 4:机器人无法后退。
  • Error: 5:有箱子没有被推动过。
  • Error: 6:箱子数不是最多的。
  • Correct:测试点通过。