AT_abc453_d.[ABC453D] Go Straight
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有一个由 H 行 × W 列组成的网格。高桥在网格中上下左右移动。
从上往下第 i 行,从左往右第 j 列 (1≤i≤H,1≤j≤W) 的单元格的状态用字符 Si,j 表示。
Si,j 是#、.、o、x、S、G中的一个。
- 如果 Si,j=
#:无法进入此单元格。 - 如果 Si,j=
.:此单元格可以自由进出。也就是说,进入这个单元格后,高桥可以向上、向下、向左或向右移动到任何相邻的单元格(如果存在的话)。 - 如果 Si,j=
o:在这一格中,高桥的移动方向必须与之前的移动方向相同。也就是说,在进入这一格后,他必须在不改变方向的情况下移动到下一格。 - 如果 Si,j=
x:在这一格中,高桥不能沿与前一步相同的方向移动。也就是说,在进入这一格后,他必须改变方向移动到下一格。转 180 度回到上一格被视为改变方向。 - 如果 Si,j=
S:此格是高桥的起始位置。此格可以自由进出。 - 如果 Si,j=
G:此格是高桥的目的地。此格可以自由进出。
刚好有一个 (i,j) (1≤i≤H,1≤j≤W) 满足 Si,j= S,刚好有一个 (i,j) (1≤i≤H,1≤j≤W) 满足 Si,j= G。
高桥想要通过重复地从起始位置向上、下、左或右移动到相邻的单元格来到达目的地。
请判断这是否可行,如果可行,请输出一个在相邻单元格之间最多有 5×106 次移动的有效移动序列。
可以证明,如果在问题的条件下存在一个有效的移动序列,那么就存在一个最多有 5×106 次移动的序列。
只要移动次数最多为 5×106 ,就没有必要最小化移动次数。
输入格式
输入内容由标准输入法提供,格式如下
H W
S1,1S1,2…S1,W
S2,1S2,2…S2,W
⋮
SH,1SH,2…SH,W
输出格式
如果无法在满足条件的情况下到达目的地,则在第一行输出 No,在第二行不输出任何内容。
如果可以在满足条件的情况下到达目的地,则在第一行输出 Yes。
在第二行中,输出一个字符串 T 代表一连串的移动。 T 必须满足以下所有条件。
- T 的长度 ∣T∣ 介于 1 和 5×106 之间(包括首尾)。
- T 中的每个字符都是
U、D、L、R中的一个。- T 的第 i 个字符是
U、D、L、R,这意味着在出发后的第 i 次移动中,高桥分别移动到相邻单元格的上方、下方、左侧或右侧。
- T 的第 i 个字符是
- 对于 1≤i≤∣T∣ ,高桥在第 i 步之后不在网格之外。
- 在移动过程中,每个单元格的条件都没有被违反。
- 在第 ∣T∣ 次移动之后,高桥位于目的地单元格。只要满足这个条件,他就可以在 ∣T∣ 步之前通过目的单元格。
输入输出样例
输入#1
3 5 .#... .Sooo ..x.G
输出#1
Yes DRUUDDRR
输入#2
3 3 #So xoG ..#
输出#2
Yes DDLURR
输入#3
2 2 So oG
输出#3
No
说明/提示
样例解释 #1
让单元格 (i,j) 表示从上往下第 i 行、从左往右第 j 列的单元格。
根据样例输出,路径为:(2,2) → (3,2) → (3,3) → (3,2) → (2,3) → (1,3) → (2,3) → (3,3) → (3,4) → (3,5),到达目的地。
其他解决方案,如 DRUURLRRDD 也被接受。另一方面,由于高桥无法直接穿过 (3,3) 单元格,因此 DRRR 等解法不被接受。
样例解释 #3
不可能在满足条件的情况下到达目的地。
限制因素
- 1≤H,W≤1000
- Si,j 是
#,.,o,x,S,G中的一个 - 正好有一个 (i,j) 满足 Si,j=
S,正好有一个满足 Si,j=G - H 和 W 是整数
输入解题思路,AI测评打分。不知道怎么写?