【codevs1298】凸包周长,计算几何
来源:互联网 发布:页游平台源码 编辑:程序博客网 时间:2024/06/05 11:06
Time:2016.07.19
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:求凸包模板题,找个时间加深理解
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define eps 1e-5using namespace std;int n;struct Vec{ double x,y; Vec(double X=0,double Y=0){x=X;y=Y;}};typedef Vec Point;Point p[100003],ch[100003];int dcmp(double p){ if (fabs(p)<=eps) return 0; return p>0?1:-1;}Vec operator +(Vec a,Vec b){return Vec(a.x+b.x,a.y+b.y);}Vec operator -(Vec a,Vec b){return Vec(a.x-b.x,a.y-b.y);}Vec operator *(Vec a,double p){return Vec(a.x*p,a.y*p);}Vec operator /(Vec a,double p){return Vec(a.x/p,a.y/p);}bool operator <(Point a,Point b){return a.x<b.x;}double Cross(Vec a,Vec b){return a.x*b.y-a.y*b.x;}double DisPP(Point a,Point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double ConvexHull(Point *p,Point *ch,int n){ sort(p,p+n); int k,sum=0;double ans=0; for (int i=0;i<n;i++) { while (sum>1&&dcmp(Cross(ch[sum-1]-ch[sum-2],p[i]-ch[sum-2]))>=0) sum--; ch[sum++]=p[i]; } k=sum; for (int i=n-2;i>=0;i--) { while (sum>k&&dcmp(Cross(ch[sum-1]-ch[sum-2],p[i]-ch[sum-2]))>=0) sum--; ch[sum++]=p[i]; } if (n>0) sum--; for (int i=0;i<sum;i++) ans+=DisPP(ch[i],ch[(i+1)%sum]); return ans;}main(){ scanf("%d",&n); for (int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); printf("%.1lf",ConvexHull(p,ch,n));}
0 0
- 【codevs1298】凸包周长,计算几何
- CodeVS1298 凸包周长 解题报告【计算几何】【凸包】
- codevs1298 凸包周长 解题报告
- POJ1113 计算几何--整形凸包模板周长
- POJ1113 凸包周长计算
- 计算几何-凸包
- Graham算法(计算凸包周长)
- poj1113 求凸包+计算凸包周长
- UVA 11096 || Nails (计算凸包周长
- poj1113Wall(凸包周长计算)
- Light OJ 1239 计算凸包周长
- Javrvis算法计算凸包的周长
- [计算几何]凸包算法
- 计算几何之凸包
- 计算几何-凸包问题
- 计算几何 --- 凸包 模板
- 计算几何凸包详解
- 凸包模板(codevs1298)(洛谷2742)
- 网站开发进阶(四十二)巧用clear:both
- Add Digits
- 第一天 Add Two Numbers(链表加法)
- 北漂-代码大神成长的第一天
- XZ_iOS之打开QQ临时会话列表和拨打电话
- 【codevs1298】凸包周长,计算几何
- UIStatusBar 屏幕顶部用于显示网络、时间和电量等的、高度为20点的控件
- ZIP文件格式组成
- 带你走进Android微信支付和支付宝支付服务端操作放到客户端的故事
- Exit()
- 开发环境搭建3:linux下tuxedo安装
- TCP数据报首部
- 【面试编程题】6-动态规划类题
- 【GDOI模拟】GCD和XOR