6519: 光线追踪(rt)

Memory Limit:512 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:544 Solved:159

Description

你需要实现一个“镜子迷宫光线追踪模拟器”。

给定一个 HW 列的字符矩阵表示迷宫,每个格子字符含义如下:

  • |:竖直镜面

  • -:水平镜面

  • \:反斜杠镜面

  • /:斜杠镜面

  • .:空地

  • X:光源

每个光源会同时向上、下、左、右四个方向发射光线。光线一旦走出矩阵边界就消失。

只要有任意一条光线经过某个格子,该格子就被视为“被照亮”(包括镜子格、空地格和光源格本身)。




当光线进入某个格子时,先将该格标记为被照亮,再根据格子类型改变方向:

  • 遇到 |

    • 从左或右射入,方向反转

    • 从上或下射入,方向不变

  • 遇到 -

    • 从上或下射入,方向反转

    • 从左或右射入,方向不变

  • 遇到 \

    • 上 -> 左,左 -> 上

    • 下 -> 右,右 -> 下

  • 遇到 /

    • 上 -> 右,右 -> 上

    • 下 -> 左,左 -> 下

  • 遇到 .X:方向不变

请输出整张地图中每个位置是否最终会被照亮。

Input

第一行输入两个整数 H, W,表示地图行数和列数。

接下来输入 H 行,每行一个长度为 W 的字符串,表示地图。

保证输入仅包含 |、-、\、/、.、X 这些合法字符。

Output

输出一个 HW 列的 01 矩阵。

其中第 i 行第 j 列:

  • 1 表示该格会被照亮

  • 0 表示该格不会被照亮

Sample Input Copy

样例1
4 5
..X..
..|..
./-\.
.....
样例2
5 6
......
.\/X..
.-|/..
..X\..
......

Sample Output Copy

样例1
11111
00100
00100
00000
样例2
000100
001111
001100
111100
001100

HINT

样例解释
样例 1 中只有一个光源,位于第 1 行第 3 列。其向左、右传播会点亮整行;向下传播经过 | 时方向不变,继续点亮第 2、3 行对应位置;向上传播越界后消失,因此得到对应的 01 矩阵。
样例 2 中有两个光源,且存在 /、\、|、- 多种镜面。按本题反射规则:/ 会把上/右互换、下/左互换,\ 会把上/左互换、下/右互换。两组光线在中部区域多次转向并发生重叠照明,最终得到上面的 01 输出矩阵。
数据范围