codechef CHEFCIRC

题意

codechef

做法

考虑包含一个点集的最小的圆,一定能被两个点或三个点确定
枚举两个点,总共形成的圆个数是\(O(n^2)\)
然后再枚举每个点是否在圆内。总复杂度是\(O(n^3)\)

考虑优化这个暴力
可以二分出圆的半径,对于\(R_0,R_1,R_0<R_1\),显然\(R_1\)圆最大包含的点集会不小于\(R_0\)
对于当前二分的半径\(R\),枚举一个点最为圆周上的一个点\(x\)。然后其为直径的固定一端,直径另一端旋转。
对于每个点\(y\)如果到\(x\)距离\(\le 2R\),那么一定有一个角的范围\([l,r]\),在\(l\)时进入,\(r\)时出去,可以扫描线做一下。

\(O(n^2lognlogV)\)

posted @ 2020-05-09 09:14  Grice  阅读(89)  评论(0编辑  收藏  举报