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

Time Limit: 3 Sec  Memory Limit: 64 MB
Submit: 624  Solved: 463
[Submit][Status][Discuss]

Description

为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河。农场里一共有N(8<=N<=5,000)股泉水,并且,护城河总是笔直地连接在河道上的相邻的两股泉水。护城河必须能保护所有的泉水,也就是说,能包围所有的泉水。泉水一定在护城河的内部,或者恰好在河道上。当然,护城河构成一个封闭的环。 挖护城河是一项昂贵的工程,于是,节约的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

凸包模板题

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<algorithm>
using namespace std;
typedef struct
{double x;double y;
}Point;
Point top1, s[5005], q[5005];
double Cross(Point a, Point b, Point c)
{return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
bool comp(Point a, Point b)
{if(Cross(a, b, top1)>0)return 1;else if(Cross(a, b, top1)==0 && fabs(a.x-top1.x)<fabs(b.x-top1.x))return 1;return 0;
}
int main(void)
{double ans;int n, i, top;while(scanf("%d", &n)!=EOF){top1.x = top1.y = INT_MAX;for(i=1;i<=n;i++){scanf("%lf%lf", &s[i].x, &s[i].y);if(s[i].y<top1.y || s[i].y==top1.y && s[i].x<top1.x)top1 = s[i];}sort(s+1, s+n+1, comp);q[1] = s[1], q[2] = s[2], top = 2;for(i=3;i<=n;i++){while(top>1 && Cross(q[top-1], s[i], q[top])>=0)top--;q[++top] = s[i];}q[++top] = q[1];ans = 0;for(i=1;i<=top-1;i++)ans += sqrt((q[i].x-q[i+1].x)*(q[i].x-q[i+1].x)+(q[i].y-q[i+1].y)*(q[i].y-q[i+1].y));printf("%.2f\n", ans);}return 0;
}

bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)相关推荐

  1. bzoj 1670 [Usaco2006 Oct]Building the Moat护城河的挖掘——凸包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1670 用叉积判断.注意两端的平行于 y 轴的. #include<cstdio> ...

  2. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)...

    链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

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

    1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 387  Sol ...

  4. bzoj 1667: [Usaco2006 Oct]Cows on Skates滑旱冰的奶牛(BFS)

    1667: [Usaco2006 Oct]Cows on Skates滑旱冰的奶牛 Time Limit: 1 Sec  Memory Limit: 64 MBSec  Special Judge S ...

  5. bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(DP)

    1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 786  So ...

  6. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛

    1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 990  Solved: 64 ...

  7. bzoj:1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏

    Description 奶牛们又在玩一种无聊的数字游戏.输得很郁闷的贝茜想请你写个程序来帮她在开局时预测结果.在游戏的开始,每头牛都会得到一个数N(1<=N<=1,000,000).此时奶 ...

  8. bzoj1669[Usaco2006 Oct]Hungry Cows饥饿的奶牛*

    bzoj1669[Usaco2006 Oct]Hungry Cows饥饿的奶牛 题意: 求最长单调递增子序列,序列大小≤5000 题解: 蒟蒻弱写了一个O(n^2)的. 代码: 1 #include ...

  9. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)

    BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Description 正如你所知 ...

最新文章

  1. [Android] Gradle 安装
  2. mysql最大述_mysql最大字段数量及 varchar类型总结
  3. PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
  4. C# 数组增加元素_C语言数组——任意位置插入一个元素
  5. 数据传输服务 DTS > 数据订阅 > 数据订阅(新版) > 创建RDS MySQL数据订阅通道(新版)
  6. 本特利传感器330103-00-05-10-02-00
  7. VS无法定位程序输入点于动态链接库
  8. Azure云服务器搭建
  9. 计算机表格如何增加一列,word中的表格如何增加一列 word表格怎么增加一列
  10. 词云python_诗词名句网 -古诗词大全|诗歌|诗词鉴赏|古诗名句|诗句赏析!
  11. Praat脚本-004 | 替换标注内容
  12. UConn DataMining Math5671 课程小记(2)
  13. 乐理基础-和弦、调式
  14. MarkdownPad 2 安装配置及常见问题
  15. CodeForces 869A The Artful Expedient
  16. LaTex 数学之运算符
  17. APP下载量成空洞,留住用户最关键
  18. 小学数学与计算机整合课优质教案,小学数学优质课教案《长方形的面积》(通用5篇)...
  19. 苹果应用中含有第三方支付怎么办?
  20. Ubuntn14.04安装显卡驱动后进不了桌面

热门文章

  1. python创建txt文件并写入-python创建txt文件
  2. 自学python能干些什么副业-学会python能干嘛 学会python可以做哪些兼职?
  3. python能做什么-大家都在学的 Python,可以用来干什么?
  4. 财务有必要学python吗-财务人是否应该学Python?
  5. 百度AI语音语义一体化技术 识别的同时进行语义分析
  6. 30轧制过程的计算机控制系统,中厚板轧制过程计算机控制系统结构的研制(1)
  7. 刷新按钮_不能忍:用户求微软为Win10 Wi-Fi窗口添加刷新按钮
  8. Vue3学习之第二节:ref函数、reactive函数
  9. vue(vue-cli+vue-router)+babel+webpack项目搭建入门 (第二步)
  10. 百度二年级手工机器人_使用盈首AI炒股机器人,能获得超高超额收益率