P15680 [ICPC 2024 Jakarta R] Mirror Maze
题目描述
给定一个包含 $R$ 行(从北到南编号为 $1$ 到 $R$)和 $C$ 列(从西到东编号为 $1$ 到 $C$)的网格。网格中的每个单元格都是大小相同的正方形。位于第 $r$ 行第 $c$ 列的单元格记作 $(r, c)$。每个单元格要么是空的,要么含有一面位于单元格对角线上的镜子。每面镜子由一条线段表示。如果镜子位于单元格从西南角到东北角的对角线上,则称为**类型 $1$**;如果位于另一条对角线上(从西北角到东南角),则称为**类型 $2$**。
这些镜子遵循反射定律,即反射角等于入射角。具体来说,对于类型 $1$ 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的西、东、北或南侧。类似地,对于类型 $2$ 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的东、西、南或北侧。
:::align{center}

:::
你想从网格外部放置一个激光器,使得所有镜子都被激光束击中。共有 $2 \cdot (R+C)$ 个可能的位置来放置激光器:
- 在网格北侧的第 $c$ 列($1 \leq c \leq C$),激光束向南发射;
- 在网格南侧的第 $c$ 列($1 \leq c \leq C$),激光束向北发射;
- 在网格东侧的第 $r$ 行($1 \leq r \leq R$),激光束向西发射;
- 在网格西侧的第 $r$ 行($1 \leq r \leq R$),激光束向东发射。
:::align{center}

:::
请确定所有可能的激光器位置,使得所有镜子都被激光束击中。
输入格式
第一行包含两个整数 $R$ $C$($1 \leq R, C \leq 200$)。
接下来的 $R$ 行,每行包含一个长度为 $C$ 的字符串 $S_r$。字符串 $S_r$ 的第 $c$ 个字符表示单元格 $(r, c)$。每个字符可以是 `.`(表示单元格为空)、`/`(表示单元格有类型 $1$ 的镜子)或 `\`(表示单元格有类型 $2$ 的镜子)。网格中至少有一面镜子。
输出格式
输出一个整数,表示所有镜子都被激光束击中的可能激光器位置的数量。记这个数为 $k$。
如果 $k > 0$,则输出 $k$ 个以空格分隔的字符串,表示激光器的位置。每个字符串由一个字符紧接一个整数组成(中间无空格)。字符表示网格的侧边,可以是 `N`、`S`、`E` 或 `W`,分别表示将激光器放置在网格的北、南、东或西侧。整数表示行号或列号。你可以以任意顺序输出这些字符串。
说明/提示
**样例输入/输出 #1 的解释**
下图展示了本样例的一个解。
:::align{center}

:::
**样例输入/输出 #2 的解释**
下图展示了本样例的一个解。
:::align{center}

:::
翻译由 DeepSeek V3.2 完成