[LnOI2019]东京夏日相会

这题做法真多。
做法一:直接圆上撒点,跑最小圆覆盖\(O(n*B)\),其中B为撒点数。
做法二:先对所有圆心跑最小圆覆盖,然后将最小圆的圆心与输入圆的靠外的交点作为点,跑最小圆覆盖,多迭代几次。复杂度玄学。
做法三:观察到x,y都是可以三分的,三分套三分,\(O(n log^2 C)\),C为值域。可能可以搞成一个log。
做法四:考虑直接对所有圆做最小圆覆盖,那么问题转化成对三个圆求外接圆。
这样出现了两种做法,一:二分半径,然后直接考虑扩大之后的圆交点有没有一个落在所有扩大之后的圆内。\(O(n log C)\)
二:解方程暴算圆心,事实证明表面上的三元二次方程,只需解一个一元二次方程即可。\(O(n)\)

当然这是假设对圆的最小圆覆盖随机化算法还是\(O(n)\)的情况下的,我也不知道他是不是\(O(n)\)的,但跑得挺快。

posted @ 2019-03-17 15:41  Yuhuger  阅读(284)  评论(0编辑  收藏  举报