摘要: 整数三分 c++ int find(){ int l=1,r=n,m1,m2; int tp1,tp2; while(r l =3){// =2会死循环 m1=(l+l+r)/3; m2=(r+l+r)/3; tp1=calc(m1); tp2=calc(m2); if(tp1eps){ m1=(l 阅读全文
posted @ 2017-02-23 11:53 _zwl 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 题目大意 两种操作 1)插入一个过原点的圆 2)询问一个点是否在所有的圆中 分析 在圆中则在半径范围内 设圆心 $x,y$ 查询点$x_0,y_0$ 则$\sqrt{(x x_0)^2+(y y_0)^2} =0$ x,y 为变量 是个半平面的式子 题意变成 1)插入一个点 2)询问是否所有点都在半 阅读全文
posted @ 2017-02-23 11:47 _zwl 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 定义 直线/线段/射线 可以统计成线上一点 P 和方向向量 v的组合 写成P+tv,用 t 的取值范围确定直线/线段 c++ pt intersection(Line x,Line y){//两线交点 // if(cross(x.v,y.v)==0) 不相交; pt u=x.p y.p; db t= 阅读全文
posted @ 2017-02-23 08:06 _zwl 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题目大意 动态删点,求凸包周长 分析 反过来变成动态加点 用set维护平衡树 具体是找到凸包上左右两点 拆开 就可以把左边当作顺时针求的一个凸包,右边当作逆时针求的一个凸包,像栈那样出set就好了 注意新点在凸包内不用管它 每个点进一次出一次 $O(n \log n)$ solution c++ i 阅读全文
posted @ 2017-02-23 07:35 _zwl 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 题目大意 用最小矩形覆盖平面上所有的点 分析 有一结论:最小矩形中有一条边在凸包的边上,不然可以旋转一个角度让面积变小 "简略证明" 我们逆时针枚举一条边 用旋转卡壳维护此时最左,最右,最上的点 注意 注意凸包后点数不再是n 吐槽 凸包后点数是n,bzoj上就过了??? solution c++ i 阅读全文
posted @ 2017-02-23 07:30 _zwl 阅读(213) 评论(0) 推荐(0) 编辑