QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 2048 MB Total points: 100

#10561. Spaceship Exploration

统计

在 ICPC 银河系中,存在一片充满小行星的区域,进入该区域是不安全的。银河系的地图由二维笛卡尔坐标系表示。该区域呈一个 $N$ 边凸多边形。每个顶点从 1 到 $N$ 编号;顶点 $i$ 位于 $(X_i, Y_i)$。在任何时刻,你都不应处于该多边形内部;不过,触碰多边形的边是安全的。

共有 $Q$ 个场景(编号从 1 到 $Q$)。在场景 $j$ 中,你希望从起点 $(A_j, B_j)$ 前往终点 $(C_j, D_j)$。你将乘坐一艘只能沿直线行驶的特殊飞船。首先,你设定飞船的行驶方向,然后飞船开始沿该方向行驶。在行驶过程中,你最多只能改变一次方向。改变方向意味着你停止飞船,设定一个新的方向,然后再次开始沿新方向行驶。

对于每个场景,确定在任何时刻都不进入该区域的情况下所需的最短行驶距离,如果无法到达终点,则报告无法到达。

输入格式

第一行包含一个整数 $N$ ($3 \le N \le 100\,000$)。

接下来的 $N$ 行,每行包含两个整数 $X_i, Y_i$ ($-10^9 \le X_i, Y_i \le 10^9$)。这些点按逆时针顺序构成一个凸多边形。不存在三点共线的情况。

接下来一行包含一个整数 $Q$ ($1 \le Q \le 100\,000$)。

接下来的 $Q$ 行,每行包含四个整数 $A_j, B_j, C_j, D_j$ ($-10^9 \le A_j, B_j, C_j, D_j \le 10^9$)。起点和终点均不在区域内部。不过,起点和终点可能位于区域的边上。

输入中的所有坐标均为整数。

输出格式

对于每个场景,输出一行答案。

如果可以在任何时刻都不进入区域的情况下到达终点,则输出所需的最短行驶距离。否则,输出 $-1$。

如果你的答案与标准答案的绝对误差或相对误差不超过 $10^{-6}$,则视为正确。即,如果你的答案为 $a$,标准答案为 $b$,则当 $\frac{|a-b|}{\max(1,|b|)} \le 10^{-6}$ 时,你的答案被接受。

样例

输入 1

5
0 2
2 0
4 4
2 4
5 6
1 6 3
2 5 0 0
3 5 3 -1
1 4 5 4
3 4 3 0

输出 1

2
5.6055512755
8.48528137422
4
-1

说明 1

该样例描绘在下图中。

在场景 1 和 4 中,你可以直接前往终点而无需改变方向。

在场景 2 中,你可以先前往 $(0, 2)$,然后改变方向前往终点。

在场景 3 中,你可以先前往 $(6, 2)$,然后改变方向前往终点。

在场景 5 中,可以证明无法到达终点。

输入 2

4
-10 -9
10 -9
10 9
-10 9
2
0 10 0 -10
-10 -10 -10 -10

输出 2

200.9975124224
0

输入 3

8
-20 -10
10 -20
25 -15
35 -5
30 10
15 20
-25 15
-30 5
6
-15 -15 -15 20
-30 -5 30 15
25 20 -5 -20
-5 25 20 -20
-30 10 30 -10
-30 -50 50 0

输出 3

59.0857761929
103.2455532034
94.7213595500
101.5640991922
164.8528137424
94.3398113206

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.