QOJ.ac

QOJ

Time Limit: 10.0 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#9719. 折射射线

Statistics

有一只怪物正在袭击我们的城市!我们的英雄,小兔子,前来拯救城市。小兔子拥有一项非常强大的技能——“断裂射线”。射线可以穿透怪物并对其造成巨大伤害。但怪物也拥有一项防御技能——“镜厅”。战场上放置了若干面镜子,可以反射射线。然而,由于射线威力过大,每面镜子只能反射一次射线,之后就会损坏。

我们可以将战场视为一个二维平面,用笛卡尔坐标系描述。平面上有 $n$ 面双面镜,可以看作平行于 $x$ 轴或 $y$ 轴的线段。它们的端点坐标均为整数。

小兔子将发射 $m$ 条射线。每条射线从一个点出发,初始方向与 $x$ 轴和 $y$ 轴成 $45^\circ$ 角。当射线击中一面镜子时,它会发生镜面反射(反射角等于入射角)。同时,它也会击碎镜子,这意味着镜子会消失。小兔子将依次发射射线。只有当射线超出范围(即不再击中任何镜子)时,小兔子才会发射下一条射线。保证射线不会经过任何坐标为整数的点。详见输入格式。

小兔子有信心击败怪物。然而,他想知道第 $i$ 条射线会击中哪些镜子。

输入格式

第一行包含一个整数 $T$ ($1 \le T \le 2$),表示测试用例的数量。

每个测试用例的第一行包含两个整数 $n, m$ ($1 \le n, m \le 10^5$),分别表示镜子和射线的数量。

接下来的 $n$ 行中,第 $i$ 行包含四个整数 $x_1, y_1, x_2, y_2$ ($0 \le x_1, y_1, x_2, y_2 \le 10^9$),表示第 $i$ 面镜子的端点为 $(x_1, y_1)$ 和 $(x_2, y_2)$。保证 $x_1 = x_2$ 或 $y_1 = y_2$,且 $(x_1, y_1) \neq (x_2, y_2)$。同时保证任意两面镜子的交集为空集或仅为一个点。

接下来的 $m$ 行中,第 $i$ 行包含四个整数 $x, y, z, d$ ($0 \le x, y \le 10^9, 0 \le z \le 1, 0 \le d \le 3$),表示第 $i$ 条射线的起点和初始方向。

前三个整数 $x, y, z$ 表示射线的起点: $z = 0$:射线从 $(x + 0.5, y)$ 出发。 $z = 1$:射线从 $(x, y + 0.5)$ 出发。

最后一个整数 $d$ 表示射线的初始方向。我们使用向量来描述方向: $d = 0$:初始方向 $\vec{s} = (1, -1)$。 $d = 1$:初始方向 $\vec{s} = (-1, -1)$。 $d = 2$:初始方向 $\vec{s} = (-1, 1)$。 $d = 3$:初始方向 $\vec{s} = (1, 1)$。

保证射线的起点不会在任何镜子的线段上。

输出格式

第 $x$ 个测试用例的输出以 Case #x: 开头,占一行。

接下来的 $m$ 行中,第 $i$ 行的第一个整数为 $y$,表示第 $i$ 条射线总共击中了 $y$ 面镜子。随后是 $y$ 个整数,表示第 $i$ 条射线依次击中的镜子编号(按输入顺序,从 1 开始)。这些整数必须按照射线击中镜子的顺序给出。

样例

样例输入 1

1
4 2
1 0 6 0
5 4 4 4
1 3 3 3
5 6 4 6
7 2 1 1
0 2 0 3

样例输出 1

Case #1:
2 1 3
1 4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.