1. 圈奶牛
    ★★☆ 输入文件:fc.in 输出文件:fc.out 简单对比
    时间限制:1 s 内存限制:128 MB
    USACO/fc(译by Felicia Crazy)
    描述
    农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。
    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
    裸凸包。。
    要进攻计算几何了233
    是一个值得庆祝的日子。。
    附上本蒟蒻的代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n,top;
double ans;
struct node
{double x,y;
};
node p[10001],s[10001];double dis(const node a,const node b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}double mul(const node a,const node b,const node p0)
{return (a.x-p0.x)*(b.y-p0.y)-(b.x-p0.x)*(a.y-p0.y);
}bool cmp(const node a,const node b)
{if (mul(a,b,p[0])==0)return dis(a,p[0])<dis(b,p[0]);return mul(a,b,p[0])>0;
}void graham()
{int k=0,i;node t;top=2;for (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 (i=3;i<n;i++){while (top && mul(p[i],s[top],s[top-1])>=0)top--;top++;s[top]=p[i];}top++;s[top]=p[0];for (i=0;i<top;i++)ans+=dis(s[i],s[i+1]);
}int main()
{freopen("fc.in","r",stdin);freopen("fc.out","w",stdout);int i;scanf("%d",&n);for (i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);graham();printf("%.2lf",ans);fclose(stdin);fclose(stdout);return 0;
}

COGS896圈奶牛相关推荐

  1. P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包

    P2742 [USACO5.1]圈奶牛Fencing the Cows /[模板]二维凸包 题目: 给定一些点,问围住所有点所用的围栏的长度 题解: 凸包模板题 凸包详细 代码: #include&l ...

  2. cogs 896. 圈奶牛

    ★★☆   输入文件:fc.in   输出文件:fc.out   简单对比 时间限制:1 s   内存限制:128 MB 描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必 ...

  3. USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)

    夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必须包括他的奶牛喜欢吃草的所有地点.对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度. 输入 输入数据的第一行包括一个 ...

  4. [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)

    题目大意:求一个点集凸包边长 题解:求凸包,直接求 卡点:发现在较后面数位上有较小的误差,还以为是浮点数误差,最后发现是构造函数写成了$int$类型 C++ Code: #include <al ...

  5. P2742-二维凸包/圈奶牛Fencing the Cows【凸包】

    正题 题目链接:https://www.luogu.org/recordnew/lists?uid=SSL_WYC_zombieeeeee&pid=P2742&status=& ...

  6. luogu P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

    题解: 二维凸包裸题 按照x坐标为第一关键字,y坐标为第二关键字排序 然后相邻判断叉积用单调队列搞过去 正反都做一次就好了 代码: #include <bits/stdc++.h> usi ...

  7. P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

    传送门 二维凸包的板子,抄yyb大佬的 //minamoto #include<bits/stdc++.h> #define rint register int #define inf 0 ...

  8. 模板:二维凸包(计算几何)

    所谓凸包,就是一个凸出来的包 (逃) 前言 解析集合的第一课. 关键特征:周长最小.此时一定是凸包. 解析 定义 凸包:在平面上能包含所有给定点的最小凸多边形叫做凸包. 性质:凸包的周长是所有能包含给 ...

  9. Graham算法解决凸包问题

    Graham算法解决凸包问题 模板题,题目来自洛谷如下. 圈奶牛[模板]二维凸包 题目简要描述 给定一些点,求凸包的周长. 输入格式 输入数据的第一行是一个整数.表示农夫约翰想要围住的放牧点的数目n. ...

最新文章

  1. LL1分析构造法_数学建模算法--最优赋权法(含代码)
  2. 合并a[0..mid]和a[mid+1,n-1],其中这两个数组分别有序
  3. Flutter 以Dialog Activity形式展现
  4. Linux xshell窗口批量命令编辑功能(发送键输入到所有窗口)
  5. svn显示html,而不是源代码
  6. 三星s9android recovery,三星手机怎么进入recovery模式?详细图文教程指导
  7. dedecms sphinx 配置
  8. 微信商户现金红包api php
  9. 课程笔记--复习专用
  10. MySQL数据库安装超级详细教程
  11. [WeChart]微信小程序抓包步骤
  12. java中ascii码值_java中的ASCII码值
  13. 微信小程序- MQTT模拟器
  14. Unity -- 正交/透视相机切换(2D/3D相机切换)
  15. Kubernetes 学习笔记(一)--- 基本概念及利用kubeadm部署K8S
  16. HTML实现文件上传和HTML实现打开文件目录
  17. 001:汉洛塔(递归)
  18. 如何用WxJump解决微信二维码无法跳转
  19. android mediastore参数,从 mediastore Android获取全屏幕缩略图
  20. Python+经济学:资本边际效率与IRR

热门文章

  1. 理解Kubernetes网络之Flannel网络
  2. java long和int 区别_java long int的区别
  3. MATLAB二维图动画视频制作
  4. Powerpc汇编编译学习笔记
  5. 台式计算机c盘怎么清理空间,电脑c盘变红满了怎么清理(3招彻底清理空间,几分钟就恢复蓝色了)...
  6. “狂人”黄鸣:我的功名心是人性表现
  7. 廊坊知恩:抖音小店选品技巧
  8. Linux Wine环境下如何编译安装CS反恐精英
  9. Xcode模拟iPhone教程!
  10. 联想小新Air 12系统+ 有线上网问题