nyist 78 圈水池
http://acm.nyist.net/JudgeOnline/problem.php?pid=78
圈水池
- 描述
- 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水,各个水池都标有各自的坐标,现在要你写一个程序利用最短的篱笆将这些供水装置圈起来!(篱笆足够多,并且长度可变)
- 输入
- 第一行输入的是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 圈水池的更多相关文章
- 题解报告:NYOJ #78 圈水池(打印凸包顶点)
描述: 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水,各个水池都标有各自的坐标,现在要你写一个程序利用最短的篱笆将这些供水装置圈起来!( ...
- NYOJ 78 圈水池 (入门级凸包)
题目链接:nyoj 78 单调链凸包小结 题目讲解:本题考查的主要是凸包的用法,算是入门级的吧,当然前提是你接触过,平面几何: AC代码: #include<iostream> #inc ...
- nyoj 78:圈水池 【凸包入门】
题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓“勾勒”出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后删去一个重复的起(终 ...
- 圈水池 nyoj 78 凸包算法
圈水池 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...
- NYOJ-78 圈水池,凸包裸模板!
圈水池 时间限制:3000 ms | 内存限制:65535 KB 难度:4 刚做完HDU1392,就看到这个题,嗯,原代码改改就过了. 题意不多说了,会凸包的话很简单,不会也不难,这道题时限是4s ...
- nyoj_78:圈水池(凸包入门)
题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓"勾勒"出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后 ...
- NYOJ 圈水池
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- Monotone Chain Convex Hull(单调链凸包)
Monotone Chain Convex Hull(单调链凸包)算法伪代码: //输入:一个在平面上的点集P //点集 P 按 先x后y 的递增排序 //m 表示共a[i=0...m]个点,ans为 ...
- sdutoj 2152 Balloons
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2152 Balloons Time Limit: ...
随机推荐
- Python for Infomatics 第12章 网络编程五(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.8 用urllib读取二进 ...
- 【BZOJ】3930: [CQOI2015]选数
题意 从区间\([L, R]\)选\(N\)个数(可以重复),问这\(N\)个数的最大公约数是\(K\)的方案数.(\(1 \le N, K \le 10^9, 1 \le L \le R \le 1 ...
- Ubuntu 16.04 install 搜狗输入法
1.#先添加以下源 sudo add-apt-repository ppa:fcitx-team/nightly 2.#添加源之后需要更新一下系统 sudo apt-get update 3.#开始安 ...
- PHP入门介绍与环境配置
浏览目录: 一.PHP的背景和优势: 二.PHP原理简介: 三.PHP运行环境配置: 四.编写简单的PHP代码以及测试. 一.PHP的背景和优势 1.1 什么是PHP? PHP是能让你生成动态网页 ...
- Dom4jUtils.java
package com.vcredit.framework.utils; import org.apache.commons.lang3.StringUtils;import org.dom4j.Do ...
- 多边形裁剪的Sutherland-Hodgman算法
多边形裁剪是渲染管线中重要的一个子阶段,它将视截体外的多边形去除.一种简单的裁剪策略是一旦发现一个顶点在裁剪区域以外,就立刻丢弃该多边形.更加精细的做法则是,将原来的多边形拆为多个不跨越边界的多边形, ...
- linux nginx 启动脚本
linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...
- asp.net core项目发布网站时的选项
发布网站时的选项 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的, ...
- Map<Key,Value>基于Value值排序
Map<Key,Value> 排序默认是按照KEY值的升序来进行. 针对按照Value来进行排序有两种方法: 第一种 使用TreeMap 代码如下 public class test{ ...
- 带你玩转JavaWeb开发之三 -JS插件实战开发
前提:需要掌握的知识点 填写HTML代码 Element元素中有一个innerHTML属性,这个属性可以填写一段html代码 innerHTML = "<font ...