P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包

题目:

给定一些点,问围住所有点所用的围栏的长度

题解:

凸包模板题
凸包详细

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int n;
struct point
{double x,y;
}p[10005],s[10005];
double check(point a1,point a2,point b1,point b2)//检查叉积是否大于0,如果是a就逆时针转到b
{return (a2.x-a1.x)*(b2.y-b1.y)-(b2.x-b1.x)*(a2.y-a1.y);
}
double d(point p1,point p2)//两点间距离。。。
{return sqrt((p2.y-p1.y)*(p2.y-p1.y)+(p2.x-p1.x)*(p2.x-p1.x));
}
bool cmp(point p1,point p2)//排序函数,这个函数别写错了,要不然功亏一篑
{double tmp=check(p[1],p1,p[1],p2);if(tmp>0) return 1;if(tmp==0&&d(p[0],p1)<d(p[0],p2)) return 1;return 0;
}
int main()
{scanf("%d",&n);double mid;for(int i=1;i<=n;i++){scanf("%lf%lf",&p[i].x,&p[i].y);if(i!=1&&p[i].y<p[1].y)//这是是去重 {mid=p[1].y;p[1].y=p[i].y;p[i].y=mid;mid=p[1].x;p[1].x=p[i].x;p[i].x=mid;}} sort(p+2,p+1+n,cmp);//系统快排 s[1]=p[1];//最低点一定在凸包里 int cnt=1;for(int i=2;i<=n;i++){while(cnt>1&&check(s[cnt-1],s[cnt],s[cnt],p[i])<=0) //判断前面的会不会被踢走,如果被踢走那么出栈cnt--;s[++cnt]=p[i];}s[cnt+1]=p[1];//最后一个点回到凸包起点double ans=0; for(int i=1;i<=cnt;i++) ans+=d(s[i],s[i+1]);//然后s里存好了凸包序列,只需要把两两距离累加就行printf("%.2lf\n",ans);return 0;
}

P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包相关推荐

  1. [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)

    题目大意:求一个点集凸包边长 题解:求凸包,直接求 卡点:发现在较后面数位上有较小的误差,还以为是浮点数误差,最后发现是构造函数写成了$int$类型 C++ Code: #include <al ...

  2. luogu P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

    题解: 二维凸包裸题 按照x坐标为第一关键字,y坐标为第二关键字排序 然后相邻判断叉积用单调队列搞过去 正反都做一次就好了 代码: #include <bits/stdc++.h> usi ...

  3. P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

    传送门 二维凸包的板子,抄yyb大佬的 //minamoto #include<bits/stdc++.h> #define rint register int #define inf 0 ...

  4. POJ 3348 Cows(二维凸包)

    题目链接:https://cn.vjudge.net/problem/POJ-3348 题意:有一些数,坐标已知,要用这些树作为篱笆的顶点圈一块多边形的地养牛,每头牛占地大小50,问最多能养多少头牛. ...

  5. P2742-二维凸包/圈奶牛Fencing the Cows【凸包】

    正题 题目链接:https://www.luogu.org/recordnew/lists?uid=SSL_WYC_zombieeeeee&pid=P2742&status=& ...

  6. COGS896圈奶牛

    圈奶牛 ★★☆ 输入文件:fc.in 输出文件:fc.out 简单对比 时间限制:1 s 内存限制:128 MB USACO/fc(译by Felicia Crazy) 描述 农夫约翰想要建造一个围栏 ...

  7. 小猿圈web前端简述canvas如何实现二维码和图片合成

    你经常看到活动海报什么的,上都是有各种宣传文案以及二维码形成的,你知道怎么用canvas实现二维码和图片合成,下面小猿圈Linux讲师为你详细介绍一下canvas如何实现二维码和图片合成的. 使用ur ...

  8. 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈

    小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈 一.概述 需要用到的生成二维码组件(可自行下载添加到小程序根目录utils里):https://github.com/demi52 ...

  9. 微信小程序参数二维码生成朋友圈分享图片

    前言 小程序目前无法分享到微信朋友圈,可朋友圈是一个非常重要的传播途径,所以得想办法把这个资源利用起来 微信小程序支持通过扫描/长按识别二维码或小程序码图片的方式进入一个小程序首页或小程序中某个特定页 ...

最新文章

  1. 根据字符出现频率排序
  2. flask 快速入门链接
  3. 【Python教程】sort 与sorted的用法与区别
  4. oracle11g ora 12545,sqlplus本地登录报错ORA-12545
  5. axis2 json_带有Java和Axis2的JSON Web服务
  6. [css] 为什么说不提倡用1px的小尺寸图片做背景平铺?
  7. Win10下VS2015(WDK10)驱动开发环境配置
  8. 论文解读二十七:文本行识别模型的再思考
  9. 大华linux密码,大华wifi摄像头的初始化和读取视频流
  10. vim command
  11. HTML注册登录页面模板,左右切换,用户注册、用户登录两种功能。
  12. 如何利用阿里云赚钱_5种利用云赚钱的策略
  13. css使用定义动画anima,css3,transition,animation两种动画实现区别
  14. 不让我发图,我发链接还不行吗
  15. oracle sys密码忘记了怎么办
  16. cors数据类型_在外出RTK测量作业时,学会正确使用千寻cors账号,你才是最靓的仔...
  17. matlab画分形图的具体思路,分形几何中一些经典图形的Matlab画法
  18. 赛码行测题库_行测题库:行测数字推理模拟题2.22
  19. 云曦网络空间安全实验室第一次考试WP
  20. 汇总 |计算机视觉系统学习资料下载

热门文章

  1. 孙悟空都服输!波士顿动力最新逆天机器人视频,翻筋斗连拿大顶!
  2. sklearn线性回归详解
  3. 《SAS编程与数据挖掘商业案例》学习笔记之十二
  4. linux 编写脚本示范,Linux-scripts-简单脚本和脚本的执行
  5. php 中 t怎么打开,怎么在PHP项目中实现一个explort() 功能
  6. Android 封装handler,android封装工作线程跟Handler工具类
  7. oracle 产看执行计划_ODBA 技能SPM计划
  8. mysql group 条件,mysql - mysql group by,两个条件,限制1 - SO中文参考 - www.soinside.com...
  9. 爱卡创誓记java刷钱_【178创誓记】快速升级:40到50级只需要两天的黄金刷
  10. java蛮力法背包问题_[算法课]五种蛮力法解决01背包问题