QOJ.ac

QOJ

実行時間制限: 12 s メモリ制限: 512 MB 満点: 100 ハック可能 ✓

#2444. 最近线段对

統計

最近点对问题是计算几何中的一个经典问题。在这个问题中,给定欧几里得平面上的 $n$ 个点,你需要找到距离最近的一对点。

现在,参加过多年程序设计竞赛的聪明人 Claris 正在尝试解决一个更难的问题,即最近线段对问题,它的描述也像上面那样简单。

然而,这个问题对 Claris 来说似乎太难了,她正在向你寻求帮助。

现在欧几里得平面上有 $n$ 条线段。你必须挑选两条不同的线段,然后在每条线段上各取一个点,使得这两个点之间的距离尽可能小。

为简单起见,任意两条给定的线段都没有公共点。此外,你不需要指出这两个点:只需找出它们之间可能的最小距离即可。

输入格式

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

对于每个测试用例,第一行包含一个整数 $n$ ($2 \le n \le 100\,000$),表示欧几里得平面上线段的数量。

接下来的 $n$ 行描述了欧几里得平面上的所有线段。其中第 $i$ 行包含四个整数 $x_1, y_1, x_2$ 和 $y_2$,描述了一条连接 $(x_1, y_1)$ 和 $(x_2, y_2)$ 的线段,其中 $-10^9 \le x_1, y_1, x_2, y_2 \le 10^9$。

保证在每个测试用例中,每条线段的两个端点不重合,且任意两条线段没有公共点。同时保证所有测试用例中 $n$ 的总和不超过 $100\,000$。

输出格式

对于每个测试用例,输出一行,包含一个实数:最近线段对问题的答案,要求绝对误差或相对误差不超过 $10^{-6}$。

准确地说,假设你的答案是 $a$,裁判的答案是 $b$。当且仅当 $\frac{|a-b|}{\max\{1,|b|\}} \le 10^{-6}$ 时,你的答案将被视为正确。

样例

样例输入 1

2
2
0 1 1 2
1 1 2 0
2
0 1 1 2
2 2 3 1

样例输出 1

0.707106781185
1.000000000001

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.