博客
关于我
凸包模板
阅读量:326 次
发布时间:2019-03-03

本文共 1202 字,大约阅读时间需要 4 分钟。

题意

在一个平面坐标系上有n个点,用笔画一个多边形,使得多边形包含这n个点(点在多边形的边上也算包含)。

题解

凸包模板啦。。

感觉先弄了半平面交再弄这个有点怪。。
那是因为这个之前就会了。。
现在只是来存放一下模板而已
教程大概就是先随便找一个一定在凸包上的点,我找的是最左下的一个,然后以他为基准,按逆时针或者顺时针排序(我喜欢为逆时针)
然后判断一下这个新点和栈的第二个元素连起来是不是完美包含第一个元素,是的话就把第一个元素踢掉
容易知道这样是 O(n) O ( n )
CODE:

#include
#include
#include
#include
#include
using namespace std;const int N=1005;const double eps=1e-8;int n;struct pnt{ double x,y;}s[N];double mul (pnt x,pnt y,pnt z){ double x1=x.x-z.x,y1=x.y-z.y; double x2=y.x-z.x,y2=y.y-z.y; return x1*y2-x2*y1;}double dis (pnt x,pnt y){ return sqrt((y.x-x.x)*(y.x-x.x)+(y.y-x.y)*(y.y-x.y));}bool cmp (pnt x,pnt y){ if (abs(mul(x,y,s[1]))
eps;}int sta[N],top;int main(){ scanf("%d",&n); for (int u=1;u<=n;u++) scanf("%lf%lf",&s[u].x,&s[u].y); for (int u=2;u<=n;u++) { if (s[1].y-s[u].y>eps) swap(s[1],s[u]); else if (abs(s[1].y-s[u].y)
eps) swap(s[1],s[u]); } sort(s+2,s+1+n,cmp); sta[1]=1;sta[2]=2;top=2; for (int u=3;u<=n;u++) { while (top>2&&mul(s[u],s[sta[top]],s[sta[top-1]])>eps) top--; sta[++top]=u; } double ans=0; sta[++top]=sta[1]; for (int u=2;u<=top;u++) ans=ans+dis(s[sta[u]],s[sta[u-1]]); printf("%.4lf\n",ans); return 0;}

转载地址:http://vxcq.baihongyu.com/

你可能感兴趣的文章
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>