#Lutece3058. 随机旋转法

随机旋转法

Migrated from Lutece 3058 随机旋转法

All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.

Description

最近点对是计算几何中的经典问题。给定一个包含 nn 个点的集合 SS{p1,,pn}\{p_1, \dots , p_n\}, 距离某点 pip_i 最近的点 pj(ji)p_j(j \neq i) 即为满足 ki,j\forall k \neq i,j,有 dis(pi,pj)dis(pi,pk)dis(p_i,p_j) \leq dis(p_i,p_k) 成立的点。其中,在二维平面上,两点之间的距离 $dis(p_1,p_2) = \sqrt{(p_1.x-p_2.x)^2 + (p_1.y-p_2.y)^2}$。 为了解决这个问题,有人提出了一种随机旋转的方法。算法的流程如下:

  1. [π,π)[-\pi , \pi) 内随机选取一个角度 α\alpha
  2. SS 中的每个点绕原点 (0,0)(0,0) 以角度 α\alpha 逆时针旋转。
  3. 对每个点 pip_i,取 xx 轴方向上离其最近的点,即使得 pi.xpj.x|p_i.x-p_j.x| 最小的点 pjp_j。若有多个这样的点,就取点的序号 jj 最小的。

例如,假设 SS 中有三个点 p1=(1,1)p_1=(1,1)p2=(3,3)p_2=(3,3)p3=(0,2)p_3=(0,2),则

  • α\alpha00,则点 p1,p2,p3p_1,p_2,p_3 旋转后的坐标分别为 (1,1),(3,3),(0,2)(1,1),(3,3),(0,2),距离其最近的点分别为 p3,p1,p1p_3,p_1,p_1
  • α\alphaπ4\frac{\pi}{4},则点 p1,p2,p3p_1,p_2,p_3 旋转后的坐标分别为 (0,2),(0,32),(2,2)(0,\sqrt{2}),(0,3\sqrt{2}),(-\sqrt{2},\sqrt{2}),距离其最近的点分别为 p2,p1,p1p_2,p_1,p_1

现在,给出 SS 中的 nn 个点,请你求出 n×nn\times n 的矩阵 ww,其中 wijw_{ij} 表示点 pjp_j 被选为距离点 pip_i 最近的点的概率。

Input

第一行一个整数 nn,表示点的个数。 接下来 nn 行,每行两个整数 xi,yix_i,y_i,表示一个点的坐标 (xi,yi)(x_i,y_i)。点的序号 ii 由小到大。

Output

输出 nn 行,每行 nn 个浮点数(保留 55 位小数)表示矩阵 ww。其中,第 ii 行的第 jj 个数为 wijw_{ij},即点 pjp_j 被选作距离点 pip_i 最近的点的概率。 注意,wiiw_{ii} 均为 00

Samples

3
1 1
3 3
0 2
0.00000 0.29517 0.70483
0.57798 0.00000 0.42202
0.75000 0.25000 0.00000
3
1 1
2 2
3 3
0.00000 1.00000 0.00000
1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
5
8 10
9 75
810 9
7 5
810 975
0.00000 0.00909 0.00397 0.98571 0.00123
0.87050 0.00000 0.05127 0.05576 0.02247
0.01389 0.27661 0.00000 0.27930 0.43020
0.98699 0.00783 0.00396 0.00000 0.00122
0.00559 0.30017 0.59898 0.09526 0.00000

Constraints

2n502\leq n \leq 50xi,yi1000|x_i|,|y_i| \leq 1000

Resources

2023 UESTC ICPC Training for Geometry