凸包(极角序)模板
来源:互联网 发布:执业药师网络培训 编辑:程序博客网 时间:2024/05/29 12:38
#include<cstdio>#include<iostream>#include<cmath>#define INF 1000000000using namespace std;struct Point{ double x,y;}p[100005],st[100005];int n,top;double multiply(Point sp,Point ep,Point op){ return (sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y);}double dist(Point sp,Point op){ return sqrt((sp.x-op.x)*(sp.x-op.x)+(sp.y-op.y)*(sp.y-op.y));}bool cmp(const Point &a,const Point &b){ double tmp=multiply(a,b,p[0]); return !(tmp<0||tmp==0&&dist(a,p[0])>dist(b,p[0]));}int main(){ freopen("convex.in","r",stdin); freopen("convex.out","w",stdout); cin>>n; int i,mini; double minx=INF,miny=INF; for(i=1;i<=n;i++){ scanf("%lf %lf",&p[i].x,&p[i].y); if(p[i].y<miny||p[i].y==miny&&p[i].x<minx){ minx=p[i].x; miny=p[i].y; mini=i; } } p[0]=p[mini]; p[mini]=p[n--]; sort(p+1,p+n+1,cmp);/* for(i=0;i<=n;i++) printf("%.2lf %.2lf\n",p[i].x,p[i].y);*/ st[1]=p[0]; st[2]=p[1]; top=2; for(i=2;i<=n;i++){ double tmp=multiply(st[top],p[i],st[top-1]); while(tmp<=0&&top>=2){ top--; if(top>=2)tmp=multiply(st[top],p[i],st[top-1]); } st[++top]=p[i]; } for(i=1;i<=top;i++) printf("%.0lf %.0lf\n",st[i].x,st[i].y); return 0;}
0 0
- 凸包(极角序)模板
- 凸包 极角序 模板
- 凸包问题(模板)
- hdu 1348 Wall(凸包模板)
- 凸包模板(注意去重)
- NYOJ78 圈水池(凸包模板)
- hdu-1392(二维凸包模板)
- POJ 1113 wall(凸包模板)
- 模板--二维凸包(1)
- hdu1348 Wall(凸包模板题)
- 计蒜客 羊圈复原 (凸包模板)
- 1214:凸包模板(Andrew算法)
- 凸包模板
- 1392 凸包模板
- 凸包模板
- 凸包模板题
- 更新凸包模板
- 三维凸包模板
- 使用《Playground》来调试代码
- ListView实下拉刷新的大概思路
- 中间人攻击 -- Cookie喷发
- iOS 保持界面流畅的技巧
- MySQL---错误代码: 1030 Got error 28 from storage engine
- 凸包(极角序)模板
- jQuery EasyUI使用教程之自定义数据网格分页
- java 字符串常量池
- 适配器之值传递(fragment适配器获得listview控件对象)
- Android studio启动时禁止更新
- iOS SVN--Cornerstone
- utf8转多字节
- narnia3
- Netty与Reactor模式