
计算几何
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
BZOJ1185 [HNOI2007]最小矩形覆盖(旋转卡壳)
【题解】 先求出这些点的凸包 可以证明,最小的矩形一定与凸包的边有重叠 因此,像旋转卡壳一样,逆时针将凸包各边扫一遍,这个过程中维护最上点,最左点,最右点,即可 注意这样的写法:Cross(ch[q+1]-ch[i+1],ch[i]-ch[i+1]) - Cross(ch[q]-ch[i+1],ch[i]-ch[i+1]) >-eps (不过写成 >0 也能AC。。。)原创 2015-06-16 13:27:16 · 594 阅读 · 0 评论 -
poj2284 That Nice Euler Circuit(欧拉定理+枚举)
欧拉定理:V+F-E=2 V的求法:将原有的拐点、线段不在端点处的的交点同一排序、去重,留下的点数就是V E的求法:原有线段数+新被分割出的,枚举点和线段,若点在线段上,新被分割出的就多一条 注意:eps设为1e-13挂了,设为1e-10就AC 虽然A了但其实是有问题的 比如(3.333333333333333,6.0000000) 与 (3.33333333333333原创 2015-06-14 16:00:37 · 552 阅读 · 0 评论 -
poj2187 Beauty Contest(旋转卡壳)
模板题 注意:避免凸包上三点共线 代码 #include #include #define eps 1e-10 struct Point { double x,y; Point() { x=y=0; } }; typedef Point Vector; Point P[50005],ch[50005]; double max(double a,double b)原创 2015-06-15 15:16:50 · 456 阅读 · 0 评论 -
BZOJ3190 [JLOI2013]赛车(单调栈+半平面交)
【题解】 数形结合思考: 画出v-t图像,若一条直线在一、四象限有不被覆盖的部分,它代表的车就可以领跑 将直线按他们的斜率从小到大排序后,要维护一个下凸壳,由于一条新加入的直线,能覆盖的左边的直线是从右向左单调的,所以用单调栈来维护 需要注意的细节: 1. 要在y轴右边做半平面交,我加入了一条过原点,斜率负无穷大的直线,覆盖掉了所有直线的左边一半 2. 平行线无法算交点,重叠原创 2015-06-15 21:44:04 · 933 阅读 · 0 评论