随笔分类 -  计算几何之凸包/旋转卡壳

摘要:题意:两种操作1.加点2.查询点是否在之前给定点的凸包内 题解:set维护动态凸包,分别维护上下凸壳,对y取反就行,判断点是否在凸壳内,把点加进去看要不要删除就好了 // pragma GCC optimize(2) // pragma GCC optimize(3) // pragma GCC o 阅读全文
posted @ 2019-04-05 10:35 walfy 阅读(111) 评论(0) 推荐(0) 编辑
摘要:题意:给一棵树每条边有a,b两个值,给你一个m,表示从0到m 1,假设当前为i,那么每条边的权值是a i+b,求该树任意两点的最大权值 题解:首先我们需要维护出(a,b)的凸壳,对于每个i在上面三分即可,点对用树分治维护,假设当前重心是u,那么把u的直接儿子挨个合并凸壳,这一过程用闵可夫斯基和维护, 阅读全文
posted @ 2019-03-28 19:40 walfy 阅读(143) 评论(0) 推荐(0) 编辑
摘要:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /*************************************************** 阅读全文
posted @ 2018-05-22 20:41 walfy 阅读(500) 评论(0) 推荐(0) 编辑
摘要:找最大的四边形或者三角形面积,先求凸包,然后枚举两个点,再通过旋转,找最大的另两个点 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #defin 阅读全文
posted @ 2017-09-29 17:34 walfy 阅读(379) 评论(0) 推荐(0) 编辑
摘要:给一个凸包,要求逆时针排序,刚开始一直因为极角排序就是逆时针的,所以一直wa,后来发现极角排序距离相同是,排的是随机的,所以要对末尾角度相同的点重新排一次 #include<map> #include<set> #include<cmath> #include<queue> #include<sta 阅读全文
posted @ 2017-07-19 13:15 walfy 阅读(242) 评论(0) 推荐(0) 编辑
摘要:把每个三角形看成一个质点,坐标就是各自的重心, #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert 阅读全文
posted @ 2017-07-18 18:21 walfy 阅读(264) 评论(0) 推荐(0) 编辑
摘要:自己想了一个方法判断点是不是在凸包内,先求出凸包面积,在求由点与凸包上每两个点之间的面积(点已经排好序了),如果两者相等,则点在凸包内,否则不在(时间复杂度可能有点高)但是这题能过 #include<map> #include<set> #include<cmath> #include<queue> 阅读全文
posted @ 2017-07-17 20:43 walfy 阅读(690) 评论(0) 推荐(0) 编辑
摘要:暴力过了 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<iomanip> 阅读全文
posted @ 2017-07-17 15:32 walfy 阅读(174) 评论(0) 推荐(0) 编辑
摘要:用叉积求凸包面积 如图所示,每次找p【0】来计算,(叉积是以两个向量构成的平行四边形的面积,所以要/2) #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #inc 阅读全文
posted @ 2017-07-17 13:31 walfy 阅读(851) 评论(0) 推荐(0) 编辑
摘要:就是给一系列点,看这是不是一个稳定凸包 稳定凸包是指一个凸包不能通过加点来使它扩大面积,也就是说每条边最少有三个点 判断的地方写错了,写了两边循环,其实数组s已经排好了序,直接每三个判断就好了 #include<map> #include<set> #include<cmath> #include< 阅读全文
posted @ 2017-07-17 12:40 walfy 阅读(250) 评论(0) 推荐(0) 编辑
摘要:裸的极角排序,但是要把0,0放在第一个(话说这题题目真是巨长,废话也多。。。) #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> 阅读全文
posted @ 2017-07-16 20:27 walfy 阅读(200) 评论(0) 推荐(0) 编辑
摘要:就是求凸包的周长加以l为半径的圆周长,证明略 由于之前写过叉积,所以graham扫描算法不是很难理解 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #inclu 阅读全文
posted @ 2017-07-16 20:03 walfy 阅读(312) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示