![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算几何
文章平均质量分 80
nlj1999
这个作者很懒,什么都没留下…
展开
-
POJ2187 Andrew凸包+旋转卡壳
浏览(水了水)网上各种凸包和旋转卡壳的讲解,然后来水这道模板题,结果被坑死了。。。。。。。 我的模板里是double类型的,放到POJ上狂WA(输出用的%.lf,末尾没0啊),于是很愤慨地改成了整型,A了,科学何在啊。 凸包什么的还是比较简单的(吧),想当年学的时候看学堂在线的讲解,想想也是醉人啊,从n^4到n^3到n^2再到nlogn,顺便讲了下规约(reduction),尽管现在我都不知道原创 2016-01-09 16:44:17 · 358 阅读 · 0 评论 -
BZOJ 4515: [Sdoi2016]游戏
树链剖分 将每次更新拆成若干条链上关于depth的一次函数 于是就变成了线段树维护半平面交中x轴上一段区间的y最小值 考虑每个点代表一条覆盖整个区间的直线,以此来进行标记永久化 若两个标记,即两条直线覆盖了同一区间 Case 1:其中一个标记处处比另一个优,那么显然取优的那个 Case 2:在该区间中有交点,于是取更优区间较大的那个为此区间的标记,另一个递归到相应的区间去继续更新 由原创 2016-05-18 19:49:54 · 584 阅读 · 0 评论 -
BZOJ 2961: 共点圆
突然想起来论文还没刷完QAQ简直智障 2013年xhr论文 卡斜率的时候用点积 #include #include #include #include #include using namespace std; #define rep(i,l,r) for(int i=l;i<=r;i++) #define per(i,r,l) for(int i=r;i>=l;i--) #define m原创 2016-05-11 13:22:13 · 609 阅读 · 0 评论 -
BZOJ 3571: [Hnoi2014]画框
一看TM就不会做 赶紧学了一发最小乘积生成树和最小乘积最大匹配 大概就是把每个完备匹配后的结果看成一个点(sigma(a),sigma(b)),发现答案都在下凸壳上,然后用分治递归找下凸壳就好了。 首先找到下凸壳两端的点(横坐标最小和纵坐标最小的两个点),然后连线,找到离线最远的点(叉积推公式,KM/费用流找匹配),然后分治,直到最远的点就是两点之一了,也就是两点是下凸壳上相邻的两点。 (原创 2016-04-10 09:54:59 · 368 阅读 · 0 评论 -
BZOJ 1209: [HNOI2004]最佳包裹
一眼扫过去,凸包?数据范围什么这么小? 10分钟码完了Andrew,发现答案不对…… 卧槽怎么是三维的。。。。。。。 三维凸包不会啊TAT 对着白书抄了一遍增量法,水过去了(你这样真的好吗) 好吧回去再看一遍增量法,感觉很好玩的样子。 很想知道status里0MS的大爷是怎么做到的(随机增量?) #include #include #include #include #include原创 2016-03-28 11:33:54 · 587 阅读 · 0 评论 -
BZOJ 1199: [HNOI2005]汤姆的游戏
近9S左右的龟速QAQ竟然过了 本来还写了个线段树处理矩形的情况的,结果好像跪了。 于是弃疗写暴力。 用队列维护一下当前矩形/圆的x范围内的点,然后对每个点暴力判断是否在矩形/圆内。 O(n^2) #include #include #include #include #include using namespace std; const int N=250000+5; const do原创 2016-03-27 13:27:28 · 469 阅读 · 0 评论 -
BZOJ 2732: [HNOI2012]射箭
首先分析一下题目 设抛物线为y=a*x^2+b*x 然后就是看是否存在a,b满足条件了 即y1 所以就是半平面交了 二分判断一下就……卡精度了QAQ 所以要用long double 不过判断半平面交是否为空集好像有期望O(n)的随机增量法,但是我不会啊 #include #include #include #include #include using namespace std;原创 2016-04-08 10:54:25 · 714 阅读 · 0 评论 -
BZOJ 2731: [HNOI2012]三角形覆盖问题
VFK大爷太神辣%%%%%%%% 神犇就是厉害,从小就会暴力过题 #include #include #include #include using namespace std; const int N=10000+5; struct tri{ int x,y,d,l,r; bool operator < (const tri &rhs)const{ return y<rhs.y;原创 2016-04-07 21:11:52 · 889 阅读 · 0 评论 -
BZOJ 2338: [HNOI2011]数矩形
先处理出一共O(n^2)条线段 然后找出长度相等,中点重合的线段,更新答案即可 事实上这么做极端情况下会被卡成n^3的复杂度,不过数据没有特殊构造还是能过的(其实是我也不会其他方法了) #include #include #include #include using namespace std; typedef long long ll; const int N=1500+5; ll sq原创 2016-04-06 15:35:58 · 283 阅读 · 0 评论 -
BZOJ 1185: [HNOI2007]最小矩形覆盖
做着做着卡住了。。。。。。 本来以为是三分的,结果发现错了。。。。。 这题不仅要枚举精度,还要枚举做法QAQ 或者说是我太弱了,根本没想到旋转卡壳。 第一次知道旋转卡壳还可以这么玩,左卡卡,右卡卡,上卡卡,哎然后一个矩形就卡好了。 听说SPJ很好玩的样子233333 #include #include #include #include #include using namespace原创 2016-03-21 16:57:18 · 558 阅读 · 0 评论 -
BZOJ 3564: [SHOI2014]信号增幅仪
看了一上午平面图最短路的论文还是没看懂 很想知道旅行者那题出成在线的要怎么做(离线的你都不会好不好) 然后发现老师发了个压缩包过来。 咦,14年的SH省选题 还有数据,果断开坑。 话说第一题是考高中数学吗。。。。。。 最小椭圆覆盖 和最小圆覆盖差不多 就是要推几个公式 40+min码完是不是慢了点 话说竟然1A了真神奇 #include #include #include #原创 2016-03-29 16:15:04 · 494 阅读 · 0 评论 -
1027: [JSOI2007]合金
好像湖南集训的时候见过这题(???) 首先第三维我吃了,因为可以从前两维算出,就不用管了。 然后考虑两种合金的情况。 x.a*λ+y.a*μ=z.a x.b*λ+y.b*μ=z.b (λ+μ=1) 有木有好熟悉的感觉啊,没错,点在直线上啊。 不过这题是点在线段上。 然后我们推而广之。 就变成了点在多边形内。 于是求一个最小的多边形(一定是凸的)使之包含所有点(需要的合金)。原创 2016-01-19 21:33:51 · 672 阅读 · 0 评论 -
1069: [SCOI2007]最大土地面积
准备开始BZOJ补完计划了。 话说终于可以切计算几何了,好开森。 虽然这题确实很简单。。。。。 第一眼就看出来 凸包+旋转卡壳没跑了。 先求凸包。 然后在旋转卡壳的时候,每次求出一对对踵点,在连线的左侧和右侧各找一个最远点,四个点构成的可能是最大面积,求一下更新。 具体证明什么的?????? 不会(。・_・。)ノ #include #include #include #includ原创 2016-01-19 20:38:59 · 921 阅读 · 0 评论 -
BZOJ 4520: [Cqoi2016]K远点对
BZOJ AC 300 纪念!!! 做K次凸包,每次旋转卡壳找到一对最远点,删掉他们并把他们构成的点对加入候选集合 于是候选集合的大小为O(nk)的 总复杂度O(nklogn) (好像会T) #include #include #include #include #include #include #include #include #include #define rep(i,l,r)原创 2016-05-19 21:52:36 · 338 阅读 · 0 评论