CF359E Neatness
题目描述
Simon 喜欢整洁。因此,在他上床睡觉之前,他想完成家里的所有家务。
Simon 的房子从上方看起来像一个由 $n$ 行 $n$ 列组成的矩形表。所有的行从上到下编号为 $1$ 到 $n$,所有的列从左到右编号为 $1$ 到 $n$。表格中的每个单元格代表一个房间。用 $(x,y)$ 表示位于第 $x$ 行第 $y$ 列交点的房间。我们知道每个房间的灯是否亮着。
最开始 Simon 位于房间 $(x_{0},y_{0})$。他想要关掉家中所有房间的灯,并最终回到房间 $(x_{0},y_{0})$。假设当前 Simon 位于房间 $(x,y)$,他可以执行以下操作来实现目标:
1. 操作格式为“1”,表示在房间 $(x,y)$ 开灯。如果该房间的灯已经打开,则不能执行此操作。
2. 操作格式为“2”,表示在房间 $(x,y)$ 关灯。如果该房间的灯已经关闭,则不能执行此操作。
3. 操作格式为“dir”($dir$ 是一个字符),表示 Simon 朝指定方向移动到相邻的房间。方向可以为左、右、上、下(分别用 L、R、U、D 表示)。另外,Simon 只有在他朝 $dir$ 方向看到一盏亮着的灯时才能移动。更正式地说,若我们用 $(nx,ny)$ 表示 Simon 想要前往的房间,则存在整数 $k$($k>0$),使得房间 $(x+(nx-x)k,y+(ny-y)k)$ 有一盏灯。当然,Simon 不能走出他的房子。
请帮助 Simon,找出一组行为序列,使他能够完成关掉所有灯并回到起始房间的目标。
输入格式
第一行包含三个正整数 $n,x_{0},y_{0}$($2\leq n\leq 500, 1\leq x_{0},y_{0}\leq n$)。
接下来的 $n$ 行描述了房子的每个房间。第 $i$ 行包含 $n$ 个以空格分隔的整数 $a_{i1},a_{i2},\cdots,a_{in}$。如果 $a_{ij}$ 等于 $0$,则房间 $(i,j)$ 的灯是关的,如果等于 $1$,则房间 $(i,j)$ 的灯是开的。保证至少有一个房间的灯是开的。
输出格式
如果不存在可行的行为序列,输出 “NO”。否则,输出 “YES” 并在下一行输出所需行为序列的字符串描述。注意,你不需要使行为序列最短,但不能使用超过 $3\cdot 10^{6}$ 次操作。
说明/提示
由 ChatGPT 5 翻译