#P15680. [ICPC 2024 Jakarta R] Mirror Maze
[ICPC 2024 Jakarta R] Mirror Maze
说明
给定一个包含 行(从北到南编号为 到 )和 列(从西到东编号为 到 )的网格。网格中的每个单元格都是大小相同的正方形。位于第 行第 列的单元格记作 。每个单元格要么是空的,要么含有一面位于单元格对角线上的镜子。每面镜子由一条线段表示。如果镜子位于单元格从西南角到东北角的对角线上,则称为类型 ;如果位于另一条对角线上(从西北角到东南角),则称为类型 。
这些镜子遵循反射定律,即反射角等于入射角。具体来说,对于类型 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的西、东、北或南侧。类似地,对于类型 的镜子,如果一束光从单元格的北、南、西或东侧射入,则它会分别反射到单元格的东、西、南或北侧。
:::align{center}
:::
你想从网格外部放置一个激光器,使得所有镜子都被激光束击中。共有 个可能的位置来放置激光器:
- 在网格北侧的第 列(),激光束向南发射;
- 在网格南侧的第 列(),激光束向北发射;
- 在网格东侧的第 行(),激光束向西发射;
- 在网格西侧的第 行(),激光束向东发射。
:::align{center}
:::
请确定所有可能的激光器位置,使得所有镜子都被激光束击中。
输入格式
第一行包含两个整数 ()。
接下来的 行,每行包含一个长度为 的字符串 。字符串 的第 个字符表示单元格 。每个字符可以是 .(表示单元格为空)、/(表示单元格有类型 的镜子)或 \(表示单元格有类型 的镜子)。网格中至少有一面镜子。
输出格式
输出一个整数,表示所有镜子都被激光束击中的可能激光器位置的数量。记这个数为 。
如果 ,则输出 个以空格分隔的字符串,表示激光器的位置。每个字符串由一个字符紧接一个整数组成(中间无空格)。字符表示网格的侧边,可以是 N、S、E 或 W,分别表示将激光器放置在网格的北、南、东或西侧。整数表示行号或列号。你可以以任意顺序输出这些字符串。
4 4
.//.
.\\.
.\/.
....
2
N3 W2
4 6
./..\.
.\...\
./../\
......
2
E3 S2
4 4
....
./\.
.\/.
....
0
提示
样例输入/输出 #1 的解释
下图展示了本样例的一个解。
:::align{center}
:::
样例输入/输出 #2 的解释
下图展示了本样例的一个解。
:::align{center}
:::
翻译由 DeepSeek V3.2 完成
京公网安备 11011102002149号