usaco 5.1 Fencing the Cows(凸包模板题)
来源:互联网 发布:淘宝客服电话人工按几 编辑:程序博客网 时间:2024/05/23 01:57
Hal Burch
Farmer John wishes to build a fence to contain his cows, but he's a bit short on cash right. Any fence he builds must contain all of the favorite grazing spots for his cows. Given the location of these spots, determine the length of the shortest fence which encloses them.
PROGRAM NAME: fc
INPUT FORMAT
The first line of the input file contains one integer, N. N (0 <= N <= 10,000) is the number of grazing spots that Farmer john wishes to enclose. The next N line consists of two real numbers, Xi and Yi, corresponding to the location of the grazing spots in the plane (-1,000,000 <= Xi,Yi <= 1,000,000). The numbers will be in decimal format.
SAMPLE INPUT (file fc.in)
44 84 125 9.37 8
OUTPUT FORMAT
The output should consists of one real number, the length of fence required. The output should be accurate to two decimal places.
SAMPLE OUTPUT (file fc.out)
12.00
题意:给你一些点,求包围这些点的周长最小的多边形
分析:周长最小的多边形说明一定是凸包,直接套个凸包求周长就行了
代码:
/*ID: 15114582PROG: fcLANG: C++*/#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int mm=11111;typedef double diy;struct point{ diy x,y; point(){} point(diy _x,diy _y):x(_x),y(_y){}}g[mm],q[mm];point Vector(point s,point t){ return point(t.x-s.x,t.y-s.y);}diy CrossProduct(point P,point Q){ return P.x*Q.y-P.y*Q.x;}diy MultiCross(point P,point Q,point R){ return CrossProduct(Vector(Q,P),Vector(Q,R));}diy SqrDis(point P,point Q){ return (P.x-Q.x)*(P.x-Q.x)+(P.y-Q.y)*(P.y-Q.y);}bool TurnRight(point P,point Q,point R){ diy tmp=MultiCross(P,Q,R); if(tmp>0)return 1; if(tmp<0)return 0; return SqrDis(P,Q)<SqrDis(P,R);}bool cmp(point P,point Q){ return TurnRight(g[0],Q,P);}void Graham(int n,int &m){ int i,j; for(j=i=0;i<n;++i) if(g[i].x<g[j].x||(g[i].x==g[j].x&&g[i].y<g[j].y))j=i; swap(g[0],g[j]); sort(g+1,g+n,cmp); q[m=0]=g[n]=g[0]; for(i=1;i<=n;++i) { while(m&&TurnRight(q[m-1],q[m],g[i]))--m; q[++m]=g[i]; }}int main(){ freopen("fc.in","r",stdin); freopen("fc.out","w",stdout); int i,n,m; diy ans; while(~scanf("%d",&n)) { for(i=0;i<n;++i) scanf("%lf%lf",&g[i].x,&g[i].y); Graham(n,m); for(ans=i=0;i<m;++i) ans+=sqrt(SqrDis(q[i],q[i+1])); printf("%.2lf\n",ans); } return 0;}
- USACO Section 5.1 Fencing the Cows - 凸包模板题~~
- usaco 5.1 Fencing the Cows(凸包模板题)
- usaco fencing the cows
- USACO Section 5.1 Fencing the Cows
- usaco 5.1.1 Fencing the Cows
- JZOJ1312.【USACO题库】5.1.1 Fencing the Cows圈奶牛
- [USACO5.1]圈奶牛Fencing the Cows(凸包模板)
- USACO Fencing the Cows 解题报告
- Section 5.1 Fencing the Cows
- Fencing the Cows_usaco 5.1_凸包
- USACO 5.1.1 Fencing the Cows 圈奶牛 题解与分析
- C++&Pascal——【USACO 5.1.1】——Fencing the Cows
- 计算几何 usaco Fencing the Cows 圈奶牛
- Fencing the Cows
- 凸包——Luogu2742 [USACO5.1]圈奶牛Fencing the Cows
- 太感动了!第一次自己打出了USACO的题~ [USACO5.1]圈奶牛Fencing the Cows
- usaco5.1.1 Fencing the Cows
- [USACO5.1]Fencing the Cows
- 服务器莫名多次连不上,竟然是待机了。。。电源管理设置一下就ok了。。。
- Delphi中取得程序版本号
- 日志写入文件,写入sqlserver数据库(自定义参数)
- Java基础之continue与break区别
- 外来乱码控件的注册
- usaco 5.1 Fencing the Cows(凸包模板题)
- Linux中的SSH终端乱码问题的解决
- des
- 大端小端学习
- StarCraft开发:如何避免链表引起的游戏崩溃
- 设计模式6大原则:迪米特法则
- 使用Struts1实现文件上传
- 深入理解Hadoop集群和网络
- iOS 自定义选项卡控件(TabBar)的制作思路