6125 - 光线追踪(rt)

题目描述

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

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

|:竖直镜面

-:水平镜面

\:反斜杠镜面

/:斜杠镜面

.:空地

X:光源

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

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

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

遇到 |

从左或右射入,方向反转

从上或下射入,方向不变

遇到 -

从上或下射入,方向反转

从左或右射入,方向不变

遇到 \

上 -> 左,左 -> 上

下 -> 右,右 -> 下

遇到 /

上 -> 右,右 -> 上

下 -> 左,左 -> 下

遇到 .X:方向不变

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

输入

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

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

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

输出

输出一个 HW 列的 01 矩阵。

其中第 i 行第 j 列:

1 表示该格会被照亮

0 表示该格不会被照亮

样例

输入

4 5
..X..
..|..
./-\.
.....

输出

11111
00100
00100
00000

输入

5 6
......
.\/X..
.-|/..
..X\..
......

输出

000100
001111
001100
111100
001100
说明

样例解释

样例 1 中只有一个光源,位于第 1 行第 3 列。其向左、右传播会点亮整行;向下传播经过 | 时方向不变,继续点亮第 2、3 行对应位置;向上传播越界后消失,因此得到对应的 01 矩阵。

样例 2 中有两个光源,且存在 /\|- 多种镜面。按本题反射规则:/ 会把上/右互换、下/左互换,\ 会把上/左互换、下/右互换。两组光线在中部区域多次转向并发生重叠照明,最终得到上面的 01 输出矩阵。

数据范围

数据点编号数据范围特殊性质
1 H, W \leq 30 不存在光源
2 H, W \leq 30 仅包含 ( . ) 与 ( x )
3 H, W \leq 80 不存在倾斜镜面(/,\)
4 H, W \leq 80 不存在直镜面(\,-)
5 H, W \leq 200 仅存在一个光源
6 H, W \leq 500 光源数量不超过 10
7 H, W \leq 1000 无特殊性质
8 H, W \leq 2000 镜子格占比不低于 70\%
9 H, W \leq 5000 存在大量环路结构
10 H, W \leq 10000 无特殊性质
来源

2026年常州“信息与未来”小学生编程比赛线上

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 23
通过人数 2
金币数量 0 枚
难度 入门


上一题 下一题