程序设计能力实训

1242. 最近点对

单点时限: 1.0 sec

内存限制: 256 MB

在 $x \mathrm O y$ 直角坐标平面上,两点之间的距离(欧几里得距离)等于$\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}$。

例如,$(1,3)$ 与 $(4,5)$ 之间的距离是 $\sqrt{(1-4)^2+(3-5)^2}=\sqrt{13}$。

在这一平面上有 $n$ 个点,你需要从由这 $n$ 个点组成的所有点对中找出一个点对,使得这个点对中两点之间的距离在所有点对中是最小的,并输出这一距离。

或者说,你需要找出 $ \min \lbrace \mathrm {distance} (p_i,p_j) $ $ \forall$ $1 \le i \lt j \le n \rbrace $ 。

输入格式

输入的第 $1$ 行包含一个整数 $n$ $( 2 \le n \le 10^5 )$ ;

接下来的 $n$ 行中,第 $i$ 行包含两个浮点数 $x_i,y_i$ $( -10^5 \le x_i \le 10^5 , -10^5 \le y_i \le 10^5 )$,表示 $ p_i $ 的坐标。

输出格式

输出一个浮点数,表示所有点对中最小的两点距离值,结果保留两位小数

样例

Input
3
-1.5 0
0 0
0 1.5
Output
1.50

提示

在 C++ 中浮点数的范围是DBL_MINDBL_MAX
在 Java 中浮点数的范围是Double.NEGATIVE_INFINITYDouble.POSITIVE_INFINITY

2023/09/06 更新:
重写了题面描述;
新增了一些测试数据以防止部分期望时间复杂度为 $ \mathrm O (n^{1.5}) $ 但最坏时间复杂度为 $ \mathrm O (n^2) $ 的算法通过(如果不相信可以试一试)。

不限期开放

题目列表