bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘

1670: [Usaco2006 Oct]Building the Moat护城河的挖掘

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 387  Solved: 288
[Submit][Status][Discuss]

Description

为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河。

农场里一共同拥有N(8<=N<=5,000)股泉水,而且,护城河总是笔直地连接在河道上的相邻的两股泉水。护城河必须能保护全部的泉水,也就是说,能包围全部的泉水。泉水一定在护城河的内部,或者恰好在河道上。当然。护城河构成一个封闭的环。

挖护城河是一项昂贵的project,于是,节约的FJ希望护城河的总长度尽量小。

请你写个程序计算一下,在满足需求的条件下,护城河的总长最小是多少。 全部泉水的坐标都在范围为(1..10,000,000,1..10,000,000)的整点上,一股泉水相应着一个唯一确定的坐标。而且,随意三股泉水都不在一条直线上。

下面是一幅包括20股泉水的地图,泉水用"*"表示


图中的直线,为护城河的最优挖掘方案。即能围住全部泉水的最短路线。 路线从左上角起,经过泉水的坐标依次是:(18,0),(6,-6),(0,-5),(-3,-3),(-17,0),(-7,7),(0,4),(3,3)。绕行一周的路径总长为70.8700576850888(...)。答案仅仅须要保留两位小数,于是输出是70.87。

Input

* 第1行: 一个整数,N * 第2..N+1行: 每行包括2个用空格隔开的整数。x[i]和y[i],即第i股泉水的位 置坐标 

Output

* 第1行: 输出一个数字。表示满足条件的护城河的最短长度。保留两位小数 

Sample Input

20
2 10
3 7
22 15
12 11
20 3
28 9
1 12
9 3
14 14
25 6
8 1
25 1
28 4
24 12
4 15
13 5
26 5
21 11
24 4
1 8

Sample Output

70.87

HINT

Source

凸包 卡壳




凸包模板题




#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 5005
using namespace std;
int n,top;
double ans;
struct P{int x,y;}p[maxn],s[maxn];
inline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline P operator-(const P &a,const P &b)
{return (P){a.x-b.x,a.y-b.y};
}
inline ll operator*(const P &a,const P &b)
{return a.x*b.y-a.y*b.x;
}
inline ll dis(P a,P b)
{return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
inline bool operator<(const P &a,const P &b)
{ll t=(a-p[1])*(b-p[1]);if (t==0) return dis(p[1],a)<dis(p[1],b);else return t<0;
}
inline void solve()
{int t=1;F(i,2,n) if (p[i].y<p[t].y||(p[i].y==p[t].y&&p[i].x<p[t].x)) t=i;swap(p[1],p[t]);sort(p+2,p+n+1);s[++top]=p[1];s[++top]=p[2];F(i,3,n){while (top>=2&&(s[top]-s[top-1])*(p[i]-s[top-1])>=0) top--;s[++top]=p[i];}s[top+1]=p[1];F(i,1,top) ans+=sqrt(dis(s[i],s[i+1]));
}
int main()
{n=read();F(i,1,n) p[i].x=read(),p[i].y=read();solve();printf("%.2lf\n",ans);return 0;
}


转载于:https://www.cnblogs.com/yangykaifa/p/7263030.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频编解码的一些源代码

音视频编解码的一些源代码 &#xff08;转&#xff09;资料名称&#xff1a;音视频编解码的一些源代码 资料成文时间&#xff1a;不详 语言&#xff1a;英文 页数&#xff1a;很多 何人所著&#xff08;来源&#xff09;&#xff1a; 文件格式&#xff1a;原代码 开发工具:vc 说…

Vue之组件之间的数据传递

Vue的组件作用域都是孤立的&#xff0c;不允许在子组件的模板内直接引用父组件的数据&#xff0c;必须使用特定的方法才能实现组件之间的数据传递。 下列为在vue-cli创建项目中的操作 一父组件向子组件传递数据 在Vue中&#xff0c;用props向子组件传递数据。 子组件部分&#…

偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便

发现一个大佬写的 React 脚手架&#xff0c;叫Moderate, 用起来很方便 Moderate&#xff0c;意思为适中的&#xff0c;适度的&#xff0c;用这个作为代号&#xff0c;主要取决于他的本名“中用”&#xff0c;其一以贯之的想法就是中庸&#xff0c;秉承着以人为本的态度&#xf…

案例 自动办公_1300张办公系列前台参考图,请您查收!

设计情报局室内设计师的灵感聚集地关注一个有格调的空间必定有一处高颜值的前台漂亮的前台很重要...是空间给人的第一印象一个独一无二的前台设计还可以提升整个空间的气质与逼格连个漂亮的前台都没有作为颜控界扛把子的设计师们还怎么混&#xff1f;SO今天小编给大家带来一份《…

iframe里面的元素触发父窗口元素事件的jquery代码 转

例如父窗口定义了一个事件。 top: $(dom1).bind(topEvent, function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢&#xff1f;这样吗&#xff1f; $(dom1, parent.document).trigger(topEvent); 看似正确&#xff0c;实则误导人。 因为父窗口的jquery对象与iframe里…

mplayer 所支持的音视频编解码

这里我把mplayer 所支持的音视频编解码都罗列出来&#xff0c;方便大家查阅&#xff1b;-----------------------------------------------------------------------------------------------Video codecs:Working video codecscodec namefourcccodecfileoutcommentsFFmpeg Zip…

使用ifconfig取出网卡eth0的ip地址

方法1&#xff1a;sed命令12[rootoldboyedu ~]# ifconfig eth0 |sed -n 2p |seds#^.*addr:##g|sed s# B.*$##g10.0.0.50方法2&#xff1a;cut12[rootoldboyedu ~]# ifconfig eth0|grep inetaddr|cut -d ":" -f2|cut -d " " -f110.0.0.50方法3&#xff1a;…

目标检测_目标检测 | Anchor free的目标检测进阶版本

今天说的是《Soft Anchor-Point Object Detection》&#xff0c;其也是最近关于anchor free的目标检测的论文&#xff0c;作者来自于CMU&#xff0c;一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面。背景Anchor free是目标检测领域的一个研…

Colly实现豆瓣电影Top250爬取

使用 Colly 实现 豆瓣电影Top250爬取 package mainimport ("encoding/csv""github.com/PuerkitoBio/goquery""github.com/gocolly/colly""log""os""strings""time" )type Movie struct {idx string…

homework1

一.什么是RUP?二.什么是XP?三.什么是敏捷过程&#xff1f; 一。什么是RUP?RUP是一种完整而且完美的软件过程 1。最佳实践 &#xff08;1&#xff09;迭代式开发 &#xff08;2&#xff09;管理需求 &#xff08;3&#xff09;使用基于构件软件的体系结构 &#xff08;4&…

编程:休息片刻的好处

原文作者 Axel Rauschmayer 是一位居住在德国慕尼黑的自由软件工程师。他在这篇博文列举了在编程期间休息片刻的一些好处。 你会更精明而不是更卖力地工作。我曾经为了一个功能的实现而卖力工作过。每天12小时&#xff0c;整整工作了两个星期。我付出了很多努力。那两个星期之…

五个温度带的分界线_女神建筑师在拿破仑故乡打造的海景别墅,超美!超有温度!【环球设计2225期】...

生活的温度 法国建筑师阿米莉亚塔维拉(Amelia Tavella)一直对设计充满热情&#xff0c;她出生在阿雅克肖市&#xff0c;在巴黎的建筑学院学习建筑专业&#xff0c;如今她居住普罗旺斯地区的艾克斯。她说&#xff1a;“设计让我涉足很多有趣的领域并能充分发挥我的想象力。这是一…

1118. Birds in Forest (25)

并查集。。。要用路径压缩&#xff0c;不然会超时&#xff0c; #include<iostream> #include<string> #include<map> #include<vector> #include<algorithm> #include<queue> #include<set> #include<stack> using namespace …

Java线程池有哪些作用

线程池 线程池的作用 核心点:复用机制提前创建好固定的线程一直在运行状态实现复用限制线程创建数量。 1.降低资源消耗:通过池化技术重复利用已创建的线程&#xff0c;降低线程创建和销毁造成的损耗。 2.提高响应速度:任务到达时&#xff0c;无需等待线程创建即可立即执行。…

中国重名的市辖区

中国重名的市辖区 截止2016年7月31日 新华区(3) 河北省石家庄市新华区 河北省沧州市新华区 河南省平顶山市新华区 桥西区(3) 河北省石家庄市桥西区 河北省邢台市桥西区 河北省张家口市桥西区 海州区(2) 辽宁省阜新市海州区 江苏省连云港市海州区 郊区(4) 山西省阳泉市郊区 山西…

安卓关于图片压缩的那些事儿,希望给每个安卓开发人员一些帮助

从事安卓开发也有几年了,本人喜欢开门见山,此篇文章是处理以java语言下的安卓开发过程中图片压缩问题。 图片加载在我们的开发过程中都是一个内存大户,以至于我们加载每一个图片bitmap对象的时候都应该进行回收以减少内存的占用&#xff0c;而如果单张图片的大小加载在内存都会…

银行it现状调研_中央银行系统行业现状调研分析及发展趋势预测报告(2019年版)...

QYResearch预测&#xff1a;2019-2025全球与中国中央银行系统市场现状及未来发展趋势【纸版价格】&#xff1a;RMB 15000【电子版(PDF)价格】&#xff1a;RMB 15000【报告篇幅】&#xff1a;112【报告图表数】&#xff1a;158【报告出版时间】&#xff1a;2019年11月报告摘要本…

视频编解码技术小结

1、什么是H.261编码协议 答&#xff1a;H.261是最早出现的视频编码建议&#xff0c;它采用的算法结合了可减少时间冗余的帧间预测和可减少空间冗余的DCT变换的混合编码方法&#xff0c;其输出码率是p64kbit/s。p取值较小时&#xff0c;只能传清晰度不太高的图像&#…

fiber报错 (type *big.Int has no field or method FillBytes)

如何绕过dgrijalva/jwt go中的cve-2020-26160漏洞 go jwt jwt-go由于存在一个高级漏洞&#xff0c;Gitlab管道中无法传递容器安全状态。此漏洞为jwt-go&#xff0c;安装的版本为v3.2.0incompatible。错误标题如下&#xff1a;jwt-go: access restriction bypass vulnerability…

基于BISS0001构成的热释电红外延时照明控制器电路图

BISS0001是采用CMOS数模混合结构、具有DIP-16和SOIC-16两种封装的热释电红外传感信号处理集成电路。芯片内部集成了电压比较器、状态控制器、延时电路定时器、封锁时间定时器以及参考电压源等电路&#xff0c;常用于防盗报警器、自动门等各种自动开关。利用BISS0001构成的热释电…