zoukankan      html  css  js  c++  java
  • [LnOI2019]东京夏日相会

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

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

  • 相关阅读:
    Markdown学习笔记
    Go 学习笔记(一)
    case中定义变量
    <转>MySql 与Oracle区别
    Java 时间转换问题总结
    线程之间共享
    并发编程快速入门
    redis主从复制
    jedis操作redis
    redis持久化方案
  • 原文地址:https://www.cnblogs.com/Yuhuger/p/10547233.html
Copyright © 2011-2022 走看看