UVA 11626
来源:互联网 发布:js写出乘法表 编辑:程序博客网 时间:2024/04/30 07:46
这个就是套凸包的模板的基础题,注意因为三个点可以在凸包的外侧,所以while过程中不要将等于的也弹出
其他就没什么大不了的了
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-10;int dcmp(double x){ if(fabs(x)<eps) return 0; return x<0?-1:1;}struct Point{ double x,y; Point(){} Point(double x,double y):x(x),y(y){} bool operator==(const Point& rhs)const { return dcmp(x-rhs.x)==0 && dcmp(y-rhs.y)==0; } bool operator<(const Point& rhs)const { return dcmp(x-rhs.x)<0 || (dcmp(x-rhs.x)==0 && dcmp(y-rhs.y)<0); }};typedef Point Vector;Vector operator-(Point A,Point B){ return Vector(A.x-B.x,A.y-B.y);}double Cross(Vector A,Vector B){ return A.x*B.y-A.y*B.x;}int ConvexHull(Point *p,int n,Point *ch)//求凸包{ sort(p,p+n); n=unique(p,p+n)-p; int m=0; for(int i=0;i<n;i++) { while(m>1 && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-2])<0) m--; ch[m++]=p[i]; } int k=m; for(int i=n-2;i>=0;i--) { while(m>k && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-2])<0) m--; ch[m++]=p[i]; } if(n>1) m--; return m;}const int maxn=100000+10;Point p[maxn],convex[maxn];char str[2];int t,n;int main(){ scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf%lf",&p[i].x,&p[i].y); scanf("%s",str); } int ans=ConvexHull(p,n,convex); printf("%d\n",ans); for(int i=0;i<ans;i++){ printf("%.0f %.0f\n",convex[i].x,convex[i].y); } } return 0;}
0 0
- UVA 11626
- UVA 11626 Convex Hull
- UVa 11626 - Convex Hull
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 树莓派用单个LED数码管显示当前环境温度
- 内存管理
- 原生Js无缝滚动效果的简单实现
- HDU 1079 Calendar Game(博弈,找规律可解)
- AndroidStudio导入兼容包
- UVA 11626
- 计算机一样思考的大脑是如何练成的
- ajax实现无刷新分页功能
- 监听器(Listener)在开发中的应用
- flexbox学习
- 响应双击事件或是多击事件
- QThread的用法
- java中数据类型转换
- 前端-DOM对象