BZOJ 1336: [Balkan2002]Alien最小圆覆盖

正文索引 [隐藏]

Description

给出N个点,让你画一个最小的包含所有点的圆。

Input

先给出点的个数N,2<=N<=100000,再给出坐标Xi,Yi.(-10000.0<=xi,yi<=10000.0)

Output

输出圆的半径,及圆心的坐标

Sample Input

6
8.0 9.0
4.0 7.5
1.0 2.0
5.1 8.7
9.0 2.0
4.5 1.0

 

Sample Output

5.00
5.00 5.00

题解

随机增量算法!大家可以百度一下!【喂、这哪里体现随即化了啊?
就是我们考虑一个问题,我们有一个圆覆盖C,要往里面加入一个点p。
如果点p在C上或C内,在加入p的情况下C成立。
如果不是这样,那么加入p后的C’一定含有p这个点,且C’上至少有两个点。那么我们穷举p之前的点,计算两个点是圆心和半径。如果这个C’上有3个以上的点,那么我们只要知道3个点就可以确定C’了,那么我们在两个点计算的结果的基础上,穷举,计算是否有更新C’的必要。
网上说经过奇怪的推导证明之后,可以保证是O(n)的、、
这道题目有一个坑点就是不要看样例是两位小数OuQ..我保留2位小数全都Wa掉了!我猜它有SPJ,保留10位就好了。
三倍经验 => BZOJ 1337 2823