最近学了下二维的凸包,打算去摸一摸这个专题!!!
这里的话,我觉得我会去把这个专题写完
板子
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++;
}
第一题(凸包求周长)
题目传送门HDU 1392 Surround the Trees
**题意:**让你把树围起来,然后凸包搞一下,记得特判n = 1, n =2就行
AC代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
第二题(凸包的周长 + 圆的周长)
题目传送门HDU 1348 Wall
题意: 最后就是让你求凸包的周长+圆的周长
需要注意的就是换行
AC代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
第三题(凸包+旋转卡壳求最大三角形面积)
题目传送门poj 2079 Triangle
**题意:**给你n个点,然后让你去求一个最大的三角形的面积
一个面积最大的话,一定是凸包上的点,具体… 说不明白,我也是看博客记住的,然后的话,就是+旋转卡壳… 都是板子
AC代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
第四题(凸包+ 旋转卡壳求平面最远点对)
题目传送门POJ 2187 Beauty Contest
题意: 求平面最远点对的距离!!! 直接凸包+旋转卡壳
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
第五题(凸包+ 求凸多边形的面积)
题目传送门POJ 3348 Cows
题意: 就是让你求下凸包,然后求凸边行的面积,可以用叉积,但是公式一定要对… 我就是这个area_sum()一直理解错了…
AC代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
第六题(凸包+最小矩形覆盖)
题目传送门 P 3187 最小矩形覆盖
题目传送门 bzoj 1185最小矩形覆盖
题意: 裸的矩形覆盖,就是让你去求一个矩形,覆盖所有的点,然后这个矩阵的面积最小…
然后我真的没有动脑子和手去写…我觉得这个题型已经很死了。。。。所有我拿了别人写好的上了。。。。。
AC代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
持续更新中…