POJ-1113-Wall(凸包)

链接:http://poj.org/problem?id=1113


大致题意:N个点围成的城堡,求距离城堡大于L处建围墙,求围墙的最短距离

凸包问题,考虑到对于一个凸包上的一个x度的角,其需要一个180-x度半径为L的圆弧形状围墙,即求凸包周长+以L为半径圆的周长。

//FS
//#pragma comment(linker, "/stack:1024000000,1024000000")  
//#include 
#include 
#include 
#include 
#include 
using namespace std;  
#define INF 0x3f3f3f3f  
#define MAXM 100005  
const double eps = 1e-8;
const double PI = acos(-1.0);
const long long mod=1e9+7;
const int MAXN = 2007;
int sgn(double x)
{
	if(fabs(x)0)return 1;
	if(sgn(temp)==0 && List[0].dist(p1)<=List[0].dist(p2))return 1;
	return 0;
}
void Graham(int n)
{
	Point p;
	int k=0;
	p=List[0];
	for(int i=1; iList[i].y) || (p.y==List[i].y && p.x>List[i].x))
		{
			p=List[i];
			k=i;
		}
	swap(List[k],List[0]);
	sort(List+1,List+n,cmp);
	Stack[0]=0;
	top=1;
	if(n==1)return;
	Stack[1]=1;
	top=2;
	if(n==2)return ;
	for(int i=2; i1 && sgn( (List[ Stack[top-1] ]-List[ Stack[top-2] ])^(List[i]-List[ Stack[top-2] ]))<=0)
			top--;
		Stack[top++]=i;
	}
}
int main()  
{
    int n,l;
    while(scanf("%d%d",&n,&l)!=EOF)
    {
    	for(int i=0; i



你可能感兴趣的:(POJ,几何)