夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。
输入
输入数据的第一行包括一个整数 N。N(0 <= N <= 10,000)表示农夫约翰想要围住的放牧点的数目。接下来 N 行,每行由两个实数组成,Xi 和 Yi,对应平面上的放牧点坐标(-1,000,000 <= Xi,Yi <= 1,000,000)。数字用小数表示。
输出
输出必须包括一个实数,表示必须的围栏的长度。答案保留两位小数。
样例输入
4
4 8
4 12
5 9.3
7 8
样例输出
12.00

不说了

凸包模板题

维护了凸包后计算相邻两个点之间的距离

#include<bits/stdc++.h>
using namespace std;
#define eps 1e-5
inline int read(){char ch=getchar();int res=0;while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return res;
}
int n,m;
struct  point{double x,y;point(){}point (int a,int b):x(a),y(b){};friend inline point operator -(const point &a,const point &b){return point(a.x-b.x,a.y-b.y);}friend inline double operator *(const point &a,const point &b){return (a.x*b.y-a.y*b.x);}inline double calc()const{return x*x+y*y;}
}p[10005],q[10005];
inline bool comp(const point &a,const point &b){double det=(a-p[1])*(b-p[1]);if(fabs(det)>=eps) return det>0;return a.calc()<b.calc();
}
inline double coun(point a,point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
inline void graham(){int date=1;for(int i=2;i<=n;i++){if(p[i].x<p[date].x||(p[i].x==p[date].x&&p[i].y<p[date].y))date=i;}if(date!=1) swap(p[date],p[1]);sort(p+2,p+1+n,comp);q[++m]=p[1];for(int i=2;i<=n;i++){while(m>=3&&((q[m]-q[m-1])*(p[i]-q[m-1])<=eps))m--;q[++m]=p[i];}q[m+1]=p[1];
}
inline double cal(){double ans=0;for(int i=1;i<=m;i++){ans+=coun(q[i+1],q[i]);}return ans;
}
int main(){n=read();for(int i=1;i<=n;i++){cin>>p[i].x>>p[i].y;}graham();double s=cal();printf("%.2lf\n",s);
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/10366469.html

USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)相关推荐

  1. USACO Training Section 1.2 双重回文数 Dual Palindrom

    题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就 ...

  2. USACO Training Section 1.1 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  3. USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers

    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...

  4. USACO Training Section 1.1 Your Ride Is Here

    题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...

  5. USACO Training Section 1.2 挤牛奶Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  6. USACO Training Section 1.3 Calf Flac 解题报告AC代码

    解题报告: 主要方法是生长法,考虑每一位的左右各有多长的回文串,输出最长的那个,比较好想--不过要注意区分字串的奇偶. 其他实现细节看代码里的注释吧-- AC代码: /* ID: yuanmz91 P ...

  7. USACO Training Section 3.2 Feed Ratios

    [url="http://ace.delos.com/usacoprob2?a=JbTv7diNbha&S=ratios"]英文原题[/url] [url="ht ...

  8. USACO Training Section 1.3混合牛奶 Mixing Milk

    题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是 ...

  9. USACO Training Section 1.2 [USACO1.2]回文平方数

    题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且 ...

最新文章

  1. pandas明明数据有,但是通过该标签进行筛选的时候就得到空或者是错误的结果
  2. 用泛型来实现编译时期的类型推断
  3. python函数的两种嵌套方法
  4. 创新设计模式:原型模式
  5. idea下载与安装 0913
  6. 《深入理解OSGi:Equinox原理、应用与最佳实践》一3.4 事件监听
  7. windows下安装gcc编译器(c/c++/fortran)
  8. JUnit5 @RepeatedTest注解示例
  9. Android内核开发 Linux C编程调用内核模块设备驱动
  10. arm linux dma 编程 request_dma,Linux驱动技术技术之一:DMA编程
  11. 简单的遗传算法实例(MATLAB版)
  12. LM358运放(比较器、跟随器)输出最高电压问题的探讨
  13. iPhone照片备份与恢复
  14. argis利用gp工具打包tpk切片包
  15. 02 FinalReference.referent的回收时机
  16. 微信开发:NAT穿透
  17. matlab数学建模-神经网络经典应用:逼近非线性函数
  18. VisualC++开发GIS系统
  19. 跌才是机会,涨才是风险
  20. OrangePi3开发板使用指南

热门文章

  1. PWN-PRACTICE-BUUCTF-21
  2. 【HihoCoder - 1502】最大子矩阵(二维前缀和,尺取)
  3. 【HDU - 2899】 Strange fuction(二分或三分,求导)
  4. 使用OpenCV库快速求解相机内参
  5. 视觉SLAM十四讲(2):初识SLAM
  6. 石油计算机测控技术现场总线,中国石油北京《计算机测控技术》第二阶段在线作业...
  7. 28和lba48命令格式区别_编译Sass(命令行)
  8. git实现审核功能_一文教你如何搭建PDD分佣小程序实现财富自由
  9. PHP获取服务器端的相关信息
  10. copying mysql status_mysql慢查询copying to tmp table