loj#P2159. 「POI2011 R1」收缩点 Plot
「POI2011 R1」收缩点 Plot
题目描述
译自 POI 2011 Round 1. E「Plot」
给定 个点 ,将其分成不多于 个连续的段:
$$\left( P_{k_0 + 1}, \ldots, P_{k_1} \right), \left( P_{k_1 + 1}, \ldots, P_{k_2} \right), \ldots, \left( P_{k_{s - 1}+ 1}, \ldots, P_{k_s} \right), $$其中 ,且对于 ,子序列 用一个新点 替代。这时我们说 这些点被「收缩」到了点 ,从而产生一个新的点集 。两个点集的相似度定义为 这些点与其对应的「收缩」后的点距离的最大值:
$$\max_{i = 1, \ldots, s} \left( \max_{j = k_{i-1}+1, \ldots, k_i}\left( d\left( P_j, Q_i \right) \right) \right) , $$其中 表示 和 之间的距离,公式为:
$$d \left( \left(x_1, y_1 \right), \left( x_2, y_2 \right) \right) = \sqrt{ \left( x_2 - x_1 \right)^2 + \left( y_2 - y_1 \right)^2 } $$上图为一个将 收缩为 的例子,其中 被收缩为 , 被收缩为 .
给定 个点组成的序列,你需要将其「收缩」为最多 个点,使得相似度最小。原序列可以任意切割。受限于浮点数的精度限制,只要答案比最优解多出不超过 即算正确。
输入格式
第一行两个整数 和 ,,用一个空格分开。
接下来 行每行两个整数,用一个空格分开。第 行两个整数 (),表示 的坐标为 .
输出格式
第一行一个实数 ,表示与原序列的相似度。
接下来一个整数 ,表示收缩后点集的大小。
接下来 行表示 的坐标。每行两个整数 和 表示 的坐标 。
实数应保留小数点后最多 位。
7 2
2 0
0 4
4 4
4 2
8 2
11 3
14 2
3.00000000
2
2.00000000 1.76393202
11.00000000 1.99998199
数据范围与提示
Task author: Jakub Pawlewicz.
Uncompleted SPJ: ceba
SPJ: Tangjiaming
翻译:vincent163