C. 光线追踪(rt)

    传统题 1000ms 512MiB

光线追踪(rt)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

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

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

字符 含义
| 竖直镜面
- 水平镜面
\ 反斜杠镜面
/ 斜杠镜面
. 空地
X 光源

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

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

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

格子类型 反射规则
| 从左或右射入,方向反转;从上或下射入,方向不变
- 从上或下射入,方向反转;从左或右射入,方向不变
\ 上 → 左,左 → 上;下 → 右,右 → 下
/ 上 → 右,右 → 上;下 → 左,左 → 下
.X 方向不变

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

输入格式

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

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

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

输出格式

输出一个 HHWW 列的 01 矩阵。

其中第 ii 行第 jj 列:

  • 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 H,W30H, W \leq 30 不存在光源
2 仅包含 .X
3 H,W80H, W \leq 80 不存在倾斜镜面(/, \
4 不存在直镜面(|, -
5 H,W200H, W \leq 200 仅存在一个光源
6 H,W500H, W \leq 500 光源数量不超过 10
7 H,W1000H, W \leq 1000 无特殊性质
8 H,W2000H, W \leq 2000 镜子格占比不低于 70%
9 H,W5000H, W \leq 5000 存在大量环路结构
10 H,W10000H, W \leq 10000 无特殊性质

2026年常州"信息与未来"小学生编程思维展示活动-线上初赛

未参加
状态
已结束
规则
IOI
题目
6
开始于
2026-4-14 22:45
结束于
2026-5-26 14:45
持续时间
2.5 小时
主持人