?本身没啥好说的,就是半平面交的模板题,听说 是Zzy为了他的那篇论文专门出的题,但是数据被POJ更改过,时限很宽,n^2随便水,而且我的nlgn比n^2耗时还多。
先引用一下nlgn算法的介绍,在zzy论文里也有详细介绍
step1. 将所有半平面按极角排序,对于极角相同的,选择性的保留一个。 O(nlogn)
step2. 使用一个双端队列(deque),加入最开始2个半平面。
step3. 每次考虑一个新的半平面:
? a.while deque顶端的两个半平面的交点在当前半平面外:删除deque顶端的半平面
? b.while deque底部的两个半平面的交点在当前半平面外:删除deque底部的半平面
? c.将新半平面加入deque顶端
step4.删除两端多余的半平面。
具体方法是:
a.while deque顶端的两个半平面的交点在底部半平面外:删除deque顶端的半平面
b.while deque底部的两个半平面的交点在顶端半平面外:删除deque底部的半平面
重复a,b直到不能删除为止。
step5:计算出deque顶端和底部的交点即可。
精度我是一个个试出来的。。。最终是1e-10
[cpp]?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include