单点时限: 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 $ 的坐标。
输出一个浮点数,表示所有点对中最小的两点距离值,结果保留两位小数。
3 -1.5 0 0 0 0 1.5
1.50
在 C++ 中浮点数的范围是DBL_MIN
到DBL_MAX
;
在 Java 中浮点数的范围是Double.NEGATIVE_INFINITY
到Double.POSITIVE_INFINITY
。
2023/09/06 更新:
重写了题面描述;
新增了一些测试数据以防止部分期望时间复杂度为 $ \mathrm O (n^{1.5}) $ 但最坏时间复杂度为 $ \mathrm O (n^2) $ 的算法通过(如果不相信可以试一试)。