光线追踪(rt)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
你需要实现一个"镜子迷宫光线追踪模拟器"。
给定一个 行 列的字符矩阵表示迷宫,每个格子字符含义如下:
| 字符 | 含义 |
|---|---|
| |
竖直镜面 |
- |
水平镜面 |
\ |
反斜杠镜面 |
/ |
斜杠镜面 |
. |
空地 |
X |
光源 |
每个光源会同时向上、下、左、右四个方向发射光线。光线一旦走出矩阵边界就消失。
只要有任意一条光线经过某个格子,该格子就被视为"被照亮"(包括镜子格、空地格和光源格本身)。

当光线进入某个格子时,先将该格标记为被照亮,再根据格子类型改变方向:
| 格子类型 | 反射规则 |
|---|---|
| |
从左或右射入,方向反转;从上或下射入,方向不变 |
- |
从上或下射入,方向反转;从左或右射入,方向不变 |
\ |
上 → 左,左 → 上;下 → 右,右 → 下 |
/ |
上 → 右,右 → 上;下 → 左,左 → 下 |
. 或 X |
方向不变 |
请输出整张地图中每个位置是否最终会被照亮。
输入格式
第一行输入两个整数 ,表示地图行数和列数。
接下来输入 行,每行一个长度为 的字符串,表示地图。
保证输入仅包含 \|、-、\\、/、.、X 这些合法字符。
输出格式
输出一个 行 列的 01 矩阵。
其中第 行第 列:
1表示该格会被照亮0表示该格不会被照亮
样例
样例1 输入
4 5
..X..
..|..
./-\.
.....
样例1 输出
11111
00100
00100
00000
样例2 输入
5 6
......
.\/X..
.-|/..
..X\..
......
样例2 输出
000100
001111
001100
111100
001100
样例解释
-
样例1:只有一个光源,位于第 1 行第 3 列。其向左、右传播会点亮整行;向下传播经过
\|时方向不变,继续点亮第 2、3 行对应位置;向上传播越界后消失,因此得到对应的 01 矩阵。 -
样例2:有两个光源,且存在
/、\、\|、-多种镜面。按本题反射规则:/会把上/右互换、下/左互换,\会把上/左互换、下/右互换。两组光线在中部区域多次转向并发生重叠照明,最终得到上面的 01 输出矩阵。
数据范围
| 数据点编号 | 数据范围 | 特殊性质 |
|---|---|---|
| 1 | 不存在光源 | |
| 2 | 仅包含 . 与 X |
|
| 3 | 不存在倾斜镜面(/, \) |
|
| 4 | 不存在直镜面(|, -) |
|
| 5 | 仅存在一个光源 | |
| 6 | 光源数量不超过 10 | |
| 7 | 无特殊性质 | |
| 8 | 镜子格占比不低于 70% | |
| 9 | 存在大量环路结构 | |
| 10 | 无特殊性质 |
2026年常州"信息与未来"小学生编程思维展示活动-线上初赛
- 状态
- 已结束
- 规则
- IOI
- 题目
- 6
- 开始于
- 2026-4-14 22:45
- 结束于
- 2026-5-26 14:45
- 持续时间
- 2.5 小时
- 主持人