http://acm.nyist.net/JudgeOnline/problem.php?pid=78

圈水池

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
 
描述
有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水,各个水池都标有各自的坐标,现在要你写一个程序利用最短的篱笆将这些供水装置圈起来!(篱笆足够多,并且长度可变)
 
输入
第一行输入的是N,代表用N组测试数据(1<=N<=10)
第二行输入的是m,代表本组测试数据共有m个供水装置(3<=m<=100)
接下来m行代表的是各个供水装置的横纵坐标
输出
输出各个篱笆经过各个供水装置的坐标点,并且按照x轴坐标值从小到大输出,如果x轴坐标值相同,再安照y轴坐标值从小到大输出
样例输入
1
4
0 0
1 1
2 3
3 0
样例输出
0 0
2 3
3 0

分析:

凸包。

AC代码:

 // NYOJ 78 -- 圈水池 Andrew 凸包算法 O(nlogn)
// 将凸包的顶点按 从小到大 先x后y的 顺序输出
//
/*test data
9 100
200 400
300 400
300 300
400 300
400 400
500 400
500 200
350 200
200 200
== 1628 */ #include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; const int MAXP = ;
const double Pzero = 0.00001; struct POINT{
int x,y;
}p[MAXP],CHp[MAXP*]; double XJ(POINT a, POINT b, POINT c){
// vector a->b (b.x-a.x, b.y-a.y)
// vector a->c (c.x-a.x, c.y-a.y)
return (b.x-a.x)*(c.y-a.y) - (c.x-a.x)*(b.y-a.y);
} bool comp(POINT a,POINT b){
return (a.x < b.x) || ((a.x==b.x) && (a.y<b.y));
} int AndrewConvexHull(POINT *CHp, int n){
// 计算凸包 CHp[] 逆时针存点
sort(p, p + n, comp);
int nCHp = ;
for (int i = ; i < n ; CHp[nCHp++] = p[i++])
while(nCHp >= && XJ(CHp[nCHp-], CHp[nCHp-], p[i]) <= )
nCHp--;
for (int i = n - ,m = nCHp + ; i >= ; CHp[nCHp++] = p[i--])
while(nCHp >= m && XJ(CHp[nCHp-], CHp[nCHp-], p[i]) <= )
nCHp--;
return --nCHp;
} void init(int n){
// 输入
for (int i = ; i < n; i++)
scanf("%d%d", &p[i].x, &p[i].y);
} void Output(int nCHp){
sort(CHp, CHp + nCHp, comp);
for (int i = ; i < nCHp ; i++){
printf("%d %d\n", CHp[i].x, CHp[i].y);
}
} int main()
{
// freopen("in.txt","r",stdin);
int n;scanf("%d",&n);
while(~scanf("%d",&n) ){ init(n);
int nCHp = AndrewConvexHull(CHp, n);
Output(nCHp);
}
return ;
}

nyist 78 圈水池的更多相关文章

  1. 题解报告:NYOJ #78 圈水池(打印凸包顶点)

    描述: 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水,各个水池都标有各自的坐标,现在要你写一个程序利用最短的篱笆将这些供水装置圈起来!( ...

  2. NYOJ 78 圈水池 (入门级凸包)

    题目链接:nyoj 78  单调链凸包小结 题目讲解:本题考查的主要是凸包的用法,算是入门级的吧,当然前提是你接触过,平面几何: AC代码: #include<iostream> #inc ...

  3. nyoj 78:圈水池 【凸包入门】

    题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓“勾勒”出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后删去一个重复的起(终 ...

  4. 圈水池 nyoj 78 凸包算法

    圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...

  5. NYOJ-78 圈水池,凸包裸模板!

    圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 刚做完HDU1392,就看到这个题,嗯,原代码改改就过了. 题意不多说了,会凸包的话很简单,不会也不难,这道题时限是4s ...

  6. nyoj_78:圈水池(凸包入门)

    题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓"勾勒"出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后 ...

  7. NYOJ 圈水池

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  8. Monotone Chain Convex Hull(单调链凸包)

    Monotone Chain Convex Hull(单调链凸包)算法伪代码: //输入:一个在平面上的点集P //点集 P 按 先x后y 的递增排序 //m 表示共a[i=0...m]个点,ans为 ...

  9. sdutoj 2152 Balloons

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2152 Balloons Time Limit: ...

随机推荐

  1. jquery:closest和parents的主要区别

    closest和parents的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找:2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进 ...

  2. php编译内容

    ./configure --prefix=/usrc/share/php--with-apxs2=/usr/share/apache2/bin/apxs--with-config-file-path= ...

  3. Delphi中字符串补齐方法

    函数功能:当Str不满Len长度时,在Str前自动填充PadStr以补足长度,例子如下: Str:原字符串 Len:补多长 PadStr:用什么补齐,比如‘0’ function PadString( ...

  4. jQuery文本段落展开和折叠效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  5. html css 样式继承的问题

    body 设置css中可以继承的属性:letter-spacing.word-spacing.white-space.line-height.color.font等 但有时,body的样式,不能在有的 ...

  6. asp.net core项目发布网站时的选项

    发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...

  7. address_add

    <include file="Header:header-address_add" /> <include file="Header:header-pu ...

  8. VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...

  9. couldn't find setter for xxxxx

    springmvc hibernate框架,在执行普通的插入操作时报错,仔细检查实体类文件,确认该属性的getter setter方法都是有的,哭哭(´;︵;`)jpa策略生成的当然有.可是老是报这个 ...

  10. wordpress多站点环境设置上传附件大小

    多站点环境更改上传附件大小: php.ini post_max_size = 8M upload_max_filesize = 10M 另外,后台域名管理中设置/网络设置/可以设置上传文件大小. 代码 ...