#P15680. [ICPC 2024 Jakarta R] Mirror Maze

[ICPC 2024 Jakarta R] Mirror Maze

说明

给定一个包含 RR 行(从北到南编号为 11RR)和 CC 列(从西到东编号为 11CC)的网格。网格中的每个单元格都是大小相同的正方形。位于第 rr 行第 cc 列的单元格记作 (r,c)(r, c)。每个单元格要么是空的,要么含有一面位于单元格对角线上的镜子。每面镜子由一条线段表示。如果镜子位于单元格从西南角到东北角的对角线上,则称为类型 11;如果位于另一条对角线上(从西北角到东南角),则称为类型 22

这些镜子遵循反射定律,即反射角等于入射角。具体来说,对于类型 11 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的西、东、北或南侧。类似地,对于类型 22 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的东、西、南或北侧。

:::align{center} :::

你想从网格外部放置一个激光器,使得所有镜子都被激光束击中。共有 2(R+C)2 \cdot (R+C) 个可能的位置来放置激光器:

  • 在网格北侧的第 cc 列(1cC1 \leq c \leq C),激光束向南发射;
  • 在网格南侧的第 cc 列(1cC1 \leq c \leq C),激光束向北发射;
  • 在网格东侧的第 rr 行(1rR1 \leq r \leq R),激光束向西发射;
  • 在网格西侧的第 rr 行(1rR1 \leq r \leq R),激光束向东发射。

:::align{center} :::

请确定所有可能的激光器位置,使得所有镜子都被激光束击中。

输入格式

第一行包含两个整数 RR CC1R,C2001 \leq R, C \leq 200)。

接下来的 RR 行,每行包含一个长度为 CC 的字符串 SrS_r。字符串 SrS_r 的第 cc 个字符表示单元格 (r,c)(r, c)。每个字符可以是 .(表示单元格为空)、/(表示单元格有类型 11 的镜子)或 \(表示单元格有类型 22 的镜子)。网格中至少有一面镜子。

输出格式

输出一个整数,表示所有镜子都被激光束击中的可能激光器位置的数量。记这个数为 kk

如果 k>0k > 0,则输出 kk 个以空格分隔的字符串,表示激光器的位置。每个字符串由一个字符紧接一个整数组成(中间无空格)。字符表示网格的侧边,可以是 NSEW,分别表示将激光器放置在网格的北、南、东或西侧。整数表示行号或列号。你可以以任意顺序输出这些字符串。

4 4
.//.
.\\.
.\/.
....
2
N3 W2
4 6
./..\.
.\...\
./../\
......
2
E3 S2
4 4
....
./\.
.\/.
....
0

提示

样例输入/输出 #1 的解释

下图展示了本样例的一个解。

:::align{center} :::

样例输入/输出 #2 的解释

下图展示了本样例的一个解。

:::align{center} :::

翻译由 DeepSeek V3.2 完成