本文共 12323 字,大约阅读时间需要 41 分钟。
最近学了下二维的凸包,打算去摸一摸这个专题!!!
这里的话,我觉得我会去把这个专题写完
板子
const int N=50005;struct Point{ double x,y;};Point stackk[N]; //凸包中所有点,下标从0....top开始 Point p[N]; //存入的所有点 Point MinA;int top;double dist(Point A,Point B){ return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));}//计算叉积 判断bc向量到ac向量 是否通过左转得到 >0左转 <0右转 =0共线 double cross(Point A,Point B,Point C) { return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x);} bool cmp(Point a,Point b) //极角排序 { double k=cross(MinA,a,b); if(k>0) return 1; if(k<0) return 0; return dist(MinA,a) =1) --top; stackk[++top]=p[i]; } top++;}
第一题(凸包求周长)
**题意:**让你把树围起来,然后凸包搞一下,记得特判n = 1, n =2就行
AC代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
第二题(凸包的周长 + 圆的周长)
题意: 最后就是让你求凸包的周长+圆的周长
需要注意的就是换行
AC代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
第三题(凸包+旋转卡壳求最大三角形面积)
**题意:**给你n个点,然后让你去求一个最大的三角形的面积
一个面积最大的话,一定是凸包上的点,具体… 说不明白,我也是看博客记住的,然后的话,就是+旋转卡壳… 都是板子
AC代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
第四题(凸包+ 旋转卡壳求平面最远点对)
题意: 求平面最远点对的距离!!! 直接凸包+旋转卡壳
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
第五题(凸包+ 求凸多边形的面积)
题意: 就是让你求下凸包,然后求凸边行的面积,可以用叉积,但是公式一定要对… 我就是这个area_sum()一直理解错了…
AC代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
第六题(凸包+最小矩形覆盖)
题意: 裸的矩形覆盖,就是让你去求一个矩形,覆盖所有的点,然后这个矩阵的面积最小…
然后我真的没有动脑子和手去写…我觉得这个题型已经很死了。。。。所有我拿了别人写好的上了。。。。。 AC代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
持续更新中…