COGS896圈奶牛
- 圈奶牛
★★☆ 输入文件: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圈奶牛相关推荐
- P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包
P2742 [USACO5.1]圈奶牛Fencing the Cows /[模板]二维凸包 题目: 给定一些点,问围住所有点所用的围栏的长度 题解: 凸包模板题 凸包详细 代码: #include&l ...
- cogs 896. 圈奶牛
★★☆ 输入文件:fc.in 输出文件:fc.out 简单对比 时间限制:1 s 内存限制:128 MB 描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必 ...
- USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)
夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必须包括他的奶牛喜欢吃草的所有地点.对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度. 输入 输入数据的第一行包括一个 ...
- [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
题目大意:求一个点集凸包边长 题解:求凸包,直接求 卡点:发现在较后面数位上有较小的误差,还以为是浮点数误差,最后发现是构造函数写成了$int$类型 C++ Code: #include <al ...
- P2742-二维凸包/圈奶牛Fencing the Cows【凸包】
正题 题目链接:https://www.luogu.org/recordnew/lists?uid=SSL_WYC_zombieeeeee&pid=P2742&status=& ...
- luogu P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
题解: 二维凸包裸题 按照x坐标为第一关键字,y坐标为第二关键字排序 然后相邻判断叉积用单调队列搞过去 正反都做一次就好了 代码: #include <bits/stdc++.h> usi ...
- P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
传送门 二维凸包的板子,抄yyb大佬的 //minamoto #include<bits/stdc++.h> #define rint register int #define inf 0 ...
- 模板:二维凸包(计算几何)
所谓凸包,就是一个凸出来的包 (逃) 前言 解析集合的第一课. 关键特征:周长最小.此时一定是凸包. 解析 定义 凸包:在平面上能包含所有给定点的最小凸多边形叫做凸包. 性质:凸包的周长是所有能包含给 ...
- Graham算法解决凸包问题
Graham算法解决凸包问题 模板题,题目来自洛谷如下. 圈奶牛[模板]二维凸包 题目简要描述 给定一些点,求凸包的周长. 输入格式 输入数据的第一行是一个整数.表示农夫约翰想要围住的放牧点的数目n. ...
最新文章
- LL1分析构造法_数学建模算法--最优赋权法(含代码)
- 合并a[0..mid]和a[mid+1,n-1],其中这两个数组分别有序
- Flutter 以Dialog Activity形式展现
- Linux xshell窗口批量命令编辑功能(发送键输入到所有窗口)
- svn显示html,而不是源代码
- 三星s9android recovery,三星手机怎么进入recovery模式?详细图文教程指导
- dedecms sphinx 配置
- 微信商户现金红包api php
- 课程笔记--复习专用
- MySQL数据库安装超级详细教程
- [WeChart]微信小程序抓包步骤
- java中ascii码值_java中的ASCII码值
- 微信小程序- MQTT模拟器
- Unity -- 正交/透视相机切换(2D/3D相机切换)
- Kubernetes 学习笔记(一)--- 基本概念及利用kubeadm部署K8S
- HTML实现文件上传和HTML实现打开文件目录
- 001:汉洛塔(递归)
- 如何用WxJump解决微信二维码无法跳转
- android mediastore参数,从 mediastore Android获取全屏幕缩略图
- Python+经济学:资本边际效率与IRR
热门文章
- 理解Kubernetes网络之Flannel网络
- java long和int 区别_java long int的区别
- MATLAB二维图动画视频制作
- Powerpc汇编编译学习笔记
- 台式计算机c盘怎么清理空间,电脑c盘变红满了怎么清理(3招彻底清理空间,几分钟就恢复蓝色了)...
- “狂人”黄鸣:我的功名心是人性表现
- 廊坊知恩:抖音小店选品技巧
- Linux Wine环境下如何编译安装CS反恐精英
- Xcode模拟iPhone教程!
- 联想小新Air 12系统+ 有线上网问题