#P9892. [ICPC 2018 Qingdao R] Mirror
[ICPC 2018 Qingdao R] Mirror
Description
在一个无限二维平面上包含一个不透明障碍物和一个单面镜子。障碍物被表示为一个三角形,而镜子被表示为一个从点 指向 的有方向的线段,线段的右侧是反射面。
有 个石头位于点 ,DreamGrid 希望将所有石头移动到点 。需要满足以下条件:
DreamGrid 每次只能携带一个石头。 一旦 DreamGrid 拿起一个石头,他只能将其放置在点 。
设 为 DreamGrid 走过的路径,对于路径上的每一个点 ,DreamGrid 必须能直接或通过镜子看到所有的石头。
注意:
如果视线的某部分在障碍物内(视线穿过障碍物的点或边界是允许的),则认为 DreamGrid 无法通过这条视线看到石头。
如果镜子的一个端点在视线上,认为 DreamGrid 既可以在镜子中看到石头,也可以透过镜子看到石头。
反射过程遵循物理规律:入射角等于反射角。入射光线和反射光线在镜子的同一侧。
如果视线与镜子平行,则不发生反射,镜子不被视为障碍物。 DreamGrid 不能移动进入障碍物,但可以在障碍物的边缘或顶点上移动。
DreamGrid 不能穿过镜子移动,但可以在镜子上移动。注意,如果 DreamGrid 在镜子的线段上(不包括两个端点),他只能看到他来的那一侧,并且不能透过镜子看到。 DreamGrid 想要知道移动所有石头从 到 的最短距离。
Input Format
输入包括多个测试用例。第一行是一个整数 (大约 100),表示测试用例的数量。对于每个测试用例:
第一行包含一个整数 (),表示石头的数量。
第二行包含四个整数 , , 和 ,表示起始点和目标点。
第三行包含四个整数 , , 和 ,表示镜子的坐标。
接下来的 行,每行包含两个整数 和 ,表示障碍物顶点的坐标。
所有坐标的绝对值不超过 。起始点和目标点都在障碍物和镜子之外。镜子和障碍物没有公共点。
保证没有三个点是共线的。
Output Format
输出对于每个测试用例,输出一个实数表示最短距离,如果 DreamGrid 无法在约束条件下移动所有石头,则输出 。
如果你的答案的绝对误差或相对误差小于 ,则认为你的答案是正确的。
2
2
-2 0 2 0
-3 3 3 3
0 1
-3 -2
3 -2
2
-2 0 2 0
-3 3 -1 3
0 1
-3 -2
3 -2
13.416407864999
-1
京公网安备 11011102002149号