裸的凸包..很好写,废话不说,直接贴代码。

-----------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define rep(i,r) for(int i=0;i<r;i++)
using namespace std;
const int maxn=10000+5;
struct P {
    
    double x,y;
    
    P(double x=0,double y=0):x(x),y(y) {}
    
    P operator + (P o) { return P(x+o.x,y+o.y); }
    P operator - (P o) { return P(x-o.x,y-o.y); }
    
    
    bool operator == (const P &o) const {
        return x==o.x && y==o.y;
    }
    bool operator < (const P &o) const {
        return x<o.x || (x==o.x && y<o.y);
    }
    
};
P ans[maxn],p[maxn];
inline double cross(P a,P b) { return a.x*b.y-a.y*b.x; }
inline double dist(P o) { return sqrt(o.x*o.x+o.y*o.y); }
double convexHull(int n) {
    
    sort(p,p+n);
    
    int m=0;
    rep(i,n) {
        while(m>1 && cross(ans[m-1]-ans[m-2],p[i]-ans[m-2])<=0) m--;
        ans[m++]=p[i];
    }
    
    int k=m;
    for(int i=n-2;i>=0;i--) {
        while(m>k && cross(ans[m-1]-ans[m-2],p[i]-ans[m-2])<=0) m--;
        ans[m++]=p[i];
    }
    
    if(n>1) m--;
    
    double length=0;
    rep(i,m) length+=dist(ans[i]-ans[i+1]);
    
    return length;
    
}
    
int main()
{
    freopen("fc.in","r",stdin); freopen("fc.out","w",stdout);
    
    
    int n;
    cin>>n;
    rep(i,n) scanf("%lf%lf",&p[i].x,&p[i].y);
    printf("%.2lf\n",convexHull(n));
    
    
    return 0;
}

-----------------------------------------------------------------------------

Fencing the Cows
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)

4
4 8
4 12
5 9.3
7 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

USACO Section 5.1 Fencing the Cows(凸包)的更多相关文章

  1. 洛谷 P2742 [USACO5.1]圈奶牛Fencing the Cows || 凸包模板

    整篇都是仅做记录... 蓝书上的板子.水平序,单调栈.先求下凸包,再求上凸包.叉积的作用是判定向量的位置关系. 48行的作用是在求上凸包的时候不至于去删下凸包中的点.上凸包中第一个点被认为是t1. 另 ...

  2. USACO 5.1 Fencing the Cows

    Fencing the CowsHal Burch Farmer John wishes to build a fence to contain his cows, but he's a bit sh ...

  3. poj3348 Cows 凸包+多边形面积 水题

    /* poj3348 Cows 凸包+多边形面积 水题 floor向下取整,返回的是double */ #include<stdio.h> #include<math.h> # ...

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

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

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

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

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

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

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

    Problem surface 戳我 Meaning 坐标系内有若干个点,问把这些点都圈起来的最小凸包周长. 这道题就是一道凸包的模板题啊,只要求出凸包后在计算就好了,给出几个注意点 记得检查是否有吧 ...

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

    题意:n个点,求凸包周长.(纯板子QAQ) 定义 凸包:用最小的凸多边形将n个点围在里面的图形为凸包 前置 向量:点积:(a,b) (c,d)=(a*c,b*d) =|(a,b)|*|(c,d)|*c ...

  9. USACO Section 1.2 Milking Cows 解题报告

    题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...

随机推荐

  1. cocos2d-x3.0 SpriteFrameCache

    bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ...

  2. andengine游戏引擎总结进阶篇2

    本篇包括瓦片地图,物理系统, 1瓦片地图 超级玛丽,冒险岛,魂斗罗等游戏主场景都有瓦片地图画成,它的作用可见一斑,它可以用tiled Qt软件画成,在辅助篇中讲讲解tiled Qt软件的使用 1)加载 ...

  3. iSCSI存储系统知识

    一.概述 SCSI 即小型计算机系统接口(Small Computer System Interface:简写:SCSI),一种用于计算机和外部设备之间(硬盘.光驱.软驱.打印机等)系统级接口的独立处 ...

  4. ASP.NET MVC 学习之路-3

    本文在于巩固基础 到这里不得不说ASP.NET MVC一个规则:惯例优先原则 ASP.NET会假定开发人员遵循特定的规则来构建自己的程序而不是使用配置文件 ASP.NET MVC文件夹结构也遵循惯例优 ...

  5. 切换tab,并且动态添加标签

    <script type="text/javascript"> /*处理ie7.ie8不兼容getElementsByClassName*/ if(!document. ...

  6. 网络分析shell脚本(实时流量+连接统计)

    介绍一个强大的分析网络的shell脚本,此脚本是从EZHTTP拆分出来的,觉得有必要单独介绍下.脚本运行效果截图: 此脚本包含的功能有: 1.实时监控任意网卡的流量 2.统计10秒内平均流量 3.统计 ...

  7. php实现两分法查找

    两分法查找的前提:顺序方式存储,而且必须是排好序 直接上代码: function search($array, $target, $low = 0, $high = 0){ $len = count( ...

  8. MongoDB(二)

    通过程序来操作数据库: //链接字符串 string connectionString = "mongodb://192.168.1.107"; //数据库名 string dat ...

  9. sqlserver 常用函数(转)

    1.字符串函数 : len(expression) 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格. datalength(Char_expr) 返回字符串包含字符数,但不包含后面的 ...

  10. 在Windows平台下安装与配置Memcached的方法分享

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...