cogs896. 圈奶牛
2014-06-03 19:34
246 查看
http://218.28.19.228/cogs/problem/problem.php?pid=896
#include<algorithm> #include<iostream> #include<cstdio> #include<cmath> struct point{ double x,y; }p[10001],s[10001]; double dis(point a,point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));} double mul(point p1,point p2,point p0){return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);} inline bool cmp(point a,point b){if(!mul(p[0],a,b))return dis(a,p[0])<dis(b,p[0]);else return mul(p[0],a,b)>0;} using namespace std; int n;double ans; void graham(){ int top=2,k=0;point t; for(int i=1;i<n;i++) if((p[k].y>p[i].y)||(p[k].y==p[i].y&&p[k].x>p[i].x))k=i; t=p[0];p[0]=p[k];p[k]=t; sort(p+1,p+n,cmp); s[0]=p[0],s[1]=p[1],s[2]=p[2]; for(int i=3;i<n;i++){ while(top&&mul(p[i],s[top],s[top-1])>=0)top--; s[++top]=p[i]; } s[++top]=p[0]; for(int i=0;i<top;i++)ans+=dis(s[i],s[i+1]); } int main(){ freopen("fc.in","r",stdin); freopen("fc.out","w",stdout); scanf("%d",&n); for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y); graham(); printf("%.2f",ans); cin>>n; return 0; }
相关文章推荐
- COGS 896. 圈奶牛 (凸包)
- cogs896. 圈奶牛
- 【COGS & USACO】896. 圈奶牛(凸包)
- cogs 896. 圈奶牛
- [COGS896]圈奶牛(凸包)
- COGS [USACO Mar07] 奶牛交通
- cogs896 圈奶牛
- COGS1212. 奶牛排队
- cogs157. [USACO Nov07] 奶牛跨栏 x
- COGS896圈奶牛
- [cogs 1117]奶牛排队
- [cogs 896]圈奶牛(凸包)
- [悬线法] COGS 1722 [WC2002]奶牛浴场
- [cogs896]圈奶牛
- COGS 497——奶牛派对
- 【最短路】【水题】【cogs 497】奶牛派对
- COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛
- [COGS 896] 圈奶牛
- COGS130. [USACO Mar08] 游荡的奶牛[DP]
- 『天涯杂谈』(最新)三鹿事件:目前全国奶牛情绪稳定(图片)