【codevs1298】凸包周长,计算几何
Time:2016.07.19
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:求凸包模板题,找个时间加深理解
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define eps 1e-5
using 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));
}
【codevs1298】凸包周长,计算几何相关推荐
- [codevs 1298] 凸包周长 [codevs 3201] 奶牛代理商 XI
题解: 今天开始学习计算几何. 这是一道计算几何求凸包周长的模板题,采用Andrew算法. 第二道题改下输出即可. 最后凸包周长的求法注意第一个点和最后一个点是同一个. 代码 100ms 3MB #i ...
- [WIKIOI1298]凸包周长[裸凸包]
http://www.wikioi.com/problem/1298/ 这是题目. 是一道裸的凸包算法题,但是我一开始还是写WA了.先贴代码 1 #include <cstdio> 2 # ...
- 模板:二维凸包(计算几何)
所谓凸包,就是一个凸出来的包 (逃) 前言 解析集合的第一课. 关键特征:周长最小.此时一定是凸包. 解析 定义 凸包:在平面上能包含所有给定点的最小凸多边形叫做凸包. 性质:凸包的周长是所有能包含给 ...
- HDU 1348 Wall ( 凸包周长 )
链接:传送门 题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L ,求城墙的最小长度,答案四舍五入 思路:城墙与城堡直线长度是相等的, ...
- POJ - Wall(凸包周长)
题目链接:http://poj.org/problem?id=1113 Time Limit: 1000MS Memory Limit: 10000K Description Once upon a ...
- poj 1873 The Fortified Forest (位运算枚举 + 凸包周长)
题目链接:http://poj.org/problem?id=1873 大意:有一片N棵树的森林,要从中砍掉几棵树做成篱笆,把剩下的树围起来 输入:给N课树,每棵树的坐标是x,y,每棵树有一个vi和l ...
- The Fortified Forest UVALive - 5211 [二进制枚举+凸包周长]
The Fortified Forest UVALive - 5211 题意:n棵树,每棵树对应有x,y,v,l分别代表横坐标,纵坐标,价值,砍这棵树能构成的篱笆长度.现在要求输出,在最小被砍价值的情 ...
- java经纬度凸包graham_计算几何-凸包-Graham算法
一.点集有序化-水平排序 在计算几何中,点集往往无序,因此在计算前需要对点集进行排序,使得算法可以有序高效运行. 水平排序利用点在二维平面上固有的横纵坐标属性进行排序,只涉及点坐标的比较,与极坐标排序 ...
- HDU1392(凸包求周长模版)
其实这个求凸包周长也算是模版. #include<iostream> #include<algorithm> #include<cstring> #include& ...
最新文章
- python怎么处理数据_python中scrapy处理项目数据的实例分析
- 重磅!GitHub发布开源负载均衡组件GLB
- Redis数据类型操作(五) —— Sorted Set
- 参加浙江中医药大学第十二届程序设计竞赛(ACM赛制)的小记
- docker 之 Dockerfile 实践
- WCF服务寄宿IIS与Windows服务 - C#/.NET
- pythonjava有什么区别_Python与JAVA有何区别?
- 标定_基于全景基础设施的多摄像机和3D激光雷达校准
- 【机器学习】Tensorflow基本使用
- HFSS19 官方中文教程系列 L07
- SQL注入攻击原理与几种防御方式
- Gdiplus的使用 gdi+
- 计算机附件中的超级终端,windows10系统中附件中没有超级终端怎么解决
- 支付宝免签在线支付要饭教程
- 天马行空脚踏实地,阿里巴巴有群百里挑一的天才应届生...
- 解决 Nginx Let's Encrypt HTTPS 证书 错误: 服务器缺少中间证书
- 一、开水白菜(steamed Chinese cabbage in supreme soup)
- 图像处理——分水岭算法
- 初探强化学习(7)基于模型的强化学习的应用综述
- windows使用模拟器
热门文章
- 关于【微服务】,你必须了解这些
- ZooKeeper的安装和API
- 红橙Darren视频笔记 界面优化与屏幕适配(上)
- Android笔记 style样式
- Service startService方式的服务
- Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
- 如何将电子海图的航线导到gps上_电子海图(ECDIS)使用总结
- Spyder里面好像不能用汉字
- 计算机图形学E6——倒水问题emm和OpenGL没啥关系
- 从零开始学Pytorch(十七)之目标检测基础