POJ 1981 Circle and Points AND L3-021 神坛 (30 分)

转载自:http://www.hankcs.com/program/algorithm/poj-1981-circle-and-points.html
题目链接:Circle and Points

解法1: O ( n 3 ) O(n^{3}) O(n3)

当 n 不为 1 的时候,枚举两个点恰好在圆上,求的两个端点圆心,再枚举其他点

解法2: O ( n 2   l o g   n ) O(n^{2} \ log \ n) O(n2 log n)

枚举一点 i , 以 i 为圆心做单位圆
枚举一点 j , 以 j 为圆心做单位圆
若圆 i 与圆 j 相交,则相交的那段弧(在 i 上的)对于 i ,j 两点作为圆心是最优的
因为是枚举 j , 因此我们用极坐标来表示弧,重合最多的就是一定要取到 i 点的最优的情况
别人的博客,写的很详细,确实不错,但是有个地方理解了很久,现在还是有点茫然,这篇博客关于三角函数那里,不太好理解,我加表述
首先理解 a t a n 2 atan2 atan2 的用法,思考之后能发现 a t a n 2 atan2 atan2 的取值范围为 ( − π , π ) (-π,π) (ππ) a c o s acos acos 的取值 为正数
最终弧的表示范围为为 [ a t a n 2 − a c o s , a t a n 2 + a c o s ] [ atan2 - acos, atan2 + acos] [atan2acosatan2+acos]
这就会出现一个问题,不连续,举个例子
假设我输入的为 :
3
0 0
-1 -0.2
-1 0.2
对于第一个点来说的两个区间算出为[-3.980,-1.908]和[1.908,3.980](可以通过运行代码输出中间值得到)
按照这篇博客来说,上面的重合区间数为2,然而实际是三,因为 − 3.980 &lt; − 3.14 = 18 0 。 -3.980 &lt; -3.14=180^{。} 3.980<3.14=180,然后就发现[-3.980,-1.908],[1.908,3.980]这两个区间交集不为空,但是那篇博客处理方式没有处理这种情况,估计是因为枚举了每个点,然后某个点是要包含的最左上或者左下之类的点,可能没有上述情况,然后我想不到证明。。。希望有人能理解的时候也叫我一下。。。我邮箱480192919@qq.com,万分感谢

由解法 2 引出另外一个类似的题目

L3-021 神坛 (30 分)

传送门

题意
有 n 个点(3 <= n <= 5000),求 3 个点组成的三角形的面积最小为多少

很容易想到 O ( n 3 ) 的 解 法 O(n^{3})的解法 O(n3),但是会有部分数据过不去

O ( n 2 l o g n ) O(n^{2}logn) O(n2logn) 别人的博客
所以正解是什么呢,如果谁知道的,希望能在评论下面@我,谢了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值