[cogs896]圈奶牛
2017-04-06 20:40
253 查看
农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。
行,每行由两个实数组成,Xi和
Yi,对应平面上的放牧点坐标(-1,000,000 <= Xi,Yi <= 1,000,000)。数字用小数表示。
凸包周长裸题 Graham即可
代码:
4000
PROGRAM NAME: fc
INPUT FORMAT(file fc.in)
输入数据的第一行包括一个整数 N。N(0 <= N <= 10,000)表示农夫约翰想要围住的放牧点的数目。接下来N行,每行由两个实数组成,Xi和
Yi,对应平面上的放牧点坐标(-1,000,000 <= Xi,Yi <= 1,000,000)。数字用小数表示。
OUTPUT FORMAT(file fc.out)
输出必须包括一个实数,表示必须的围栏的长度。答案保留两位小数。SAMPLE INPUT (file fc.in)
4 4 8 4 12 5 9.3 7 8
SAMPLE OUTPUT (file fc.out)
12.00
凸包周长裸题 Graham即可
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int maxn=10000+10; int n; struct T{ double x,y; }A[maxn],s[maxn]; inline double dis(T a,T b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } inline double mult(T a,T b,T c){ return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y); } inline bool cmp(T a,T b){ if(mult(a,b,A[1])==0) return dis(a,A[1])<dis(b,A[1]); return mult(a,b,A[1])>0; } inline void graham(){ int j=1; for(int i=2;i<=n;i++) if(A[i].y<A[j].y||(A[i].y==A[j].y&&A[i].x<A[j].x)) j=i; T t; t=A[j],A[j]=A[1],A[1]=t; sort(A+2,A+n+1,cmp); s[1]=A[1],s[2]=A[2],s[3]=A[3]; int top=3; for(int i=4;i<=n;i++){ while(top!=1&&mult(A[i],s[top],s[top-1])>=0) top--; s[++top]=A[i]; } s[++top]=A[1]; double ans=0; for(int i=2;i<=top;i++) ans+=dis(s[i],s[i-1]); printf("%.2lf\n",ans); } int main(){ freopen("fc.in","r",stdin); freopen("fc.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf %lf",&A[i].x,&A[i].y); graham(); return 0; }
4000
相关文章推荐
- cogs896 圈奶牛
- [cogs 896]圈奶牛(凸包)
- [COGS 896] 圈奶牛
- [COGS896]圈奶牛(凸包)
- cogs896. 圈奶牛
- COGS 896. 圈奶牛 (凸包)
- COGS1212. 奶牛排队
- cogs157. [USACO Nov07] 奶牛跨栏 x
- COGS896圈奶牛
- 【COGS & USACO】896. 圈奶牛(凸包)
- [cogs 1117]奶牛排队
- [悬线法] COGS 1722 [WC2002]奶牛浴场
- COGS 497——奶牛派对
- 【最短路】【水题】【cogs 497】奶牛派对
- cogs 896. 圈奶牛
- COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛
- COGS130. [USACO Mar08] 游荡的奶牛[DP]
- COGS [USACO Mar07] 奶牛交通
- cogs896. 圈奶牛
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )