聚类算法是将数据划分为被称为“簇”(cluster)的子集的算法,旨在将相似的数据放入同一个簇中,而将不同的数据放入不同的簇中。
Jihoon Ko 教授发现了一种革命性的聚类算法——UCP-Clustering。给定二维空间中的 $N$ 个互不相同的点,该算法通过以下步骤将这些点划分为 $K$ 个簇:
- 每个簇都被分配一个代表坐标(Representative Coordinate,简称 RC),供后续使用。初始时,从给定的 $N$ 个点中选择 $K$ 个点,每个簇的 RC 对应其中一个被选中的点。尽管这些坐标是从给定的点中选择的,但此时所有簇都是空的。
- 重复执行以下重计算算法
recompute:- 对于每个点,将其插入到与其 RC 距离最小的簇中。如果有多个这样的簇,则选择其中 RC 字典序最小的簇。
- 对于每个簇,重新计算其 RC。新 RC 的 $x$ 坐标是该簇中所有点 $x$ 坐标的中位数。类似地,$y$ 坐标是该簇中所有点 $y$ 坐标的中位数。
- 如果所有簇的 RC 都没有发生变化,则算法终止。否则,清空所有簇,并再次运行
recompute算法(清空操作不会重新初始化 RC)。
此处使用以下定义:
- 点 $(x_1, y_1)$ 在字典序上小于 $(x_2, y_2)$ 当且仅当 $x_1 < x_2$,或 $x_1 = x_2$ 且 $y_1 < y_2$。
- 对于一个长度为 $n > 0$ 的序列,中位数定义为:若 $n$ 为奇数,则为第 $(n + 1)/2$ 大的值;若 $n$ 为偶数,则为第 $n/2$ 大和第 $n/2 + 1$ 大的值的平均值。
例如,考虑将 $N = 3$ 个点 $\{(1, 2), (3, 4), (5, 6)\}$ 聚类为 $K = 2$ 个集合的情况。
假设选择点 $(1, 2)$ 和 $(3, 4)$ 作为初始 RC。recompute 算法的第一次迭代将点聚类为 $\{(1, 2)\}$ 和 $\{(3, 4), (5, 6)\}$,它们的 RC 分别变为 $(1, 2)$ 和 $(4, 5)$。第二次迭代没有改变 RC,因此 recompute 算法共执行了两次。
假设选择点 $(1, 2)$ 和 $(5, 6)$ 作为初始 RC。那么 recompute 算法的第一次迭代将点聚类为 $\{(1, 2), (3, 4)\}$ 和 $\{(5, 6)\}$,它们的 RC 分别变为 $(2, 3)$ 和 $(5, 6)$。第二次迭代没有改变 RC,因此 recompute 算法共执行了两次。
从上述例子中可以看出,RC 的初始选择可能会改变聚类的结果。
在本题中,我们关注 $K = 2$ 的情况。假设等概率地从所有 $N(N - 1)/2$ 种可能的初始代表坐标选择中为每个簇选择初始 RC。请找出算法结束时所有可能的代表坐标集合,以及如果算法达到该集合,recompute 执行次数的期望值。
输入格式
第一行包含一个整数 $N$ ($2 \le N \le 512$)。
接下来的 $N$ 行,每行包含两个整数 $x_i$ 和 $y_i$,表示点 $(x_i, y_i)$。所有点互不相同($-10^6 \le x_i, y_i \le 10^6$)。
输出格式
输出所有可能的代表坐标集合,每行一个,格式如下:
设 $(x_1, y_1), (x_2, y_2)$ 为最终的代表坐标。输出五个实数 $x_1, y_1, x_2, y_2, E$,其中 $(x_1, y_1)$ 在字典序上小于 $(x_2, y_2)$,且 $E$ 是算法达到该代表坐标集合时 recompute 算法执行次数的期望值。
输出的集合必须按照 $(x_1, y_1)$ 的字典序升序排列;对于具有相同 $(x_1, y_1)$ 的集合,按照 $(x_2, y_2)$ 的字典序升序排列。
所有数值的绝对误差或相对误差必须在 $10^{-6}$ 以内。
输入数据保证,任何初始 RC 的选择都不会使算法达到满足以下任一条件的某种状态:
- 某个簇变为空。
recompute算法被无限次调用。- 两个或多个簇具有相同的 RC。
样例
输入样例 1
4 0 0 0 3 3 0 3 3
输出样例 1
0.000000 0.000000 3.000000 3.000000 1.000000000000 0.000000 1.500000 3.000000 1.500000 2.000000000000 0.000000 3.000000 3.000000 0.000000 1.000000000000 1.500000 0.000000 1.500000 3.000000 2.000000000000
输入样例 2
3 1 2 3 4 5 6
输出样例 2
1.000000 2.000000 4.000000 5.000000 2.000000000000 2.000000 3.000000 5.000000 6.000000 2.000000000000