NYOJ - 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
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
/*
PointSet[]: 输入的点集
ch[]:输出的凸包的点集,按照逆序输出
n:PointSet中点的数目
len:输出的凸包上的点的个数
*/
struct Point{
float x,y;
};
//小于说明向量p0p1的极角大于p0p2的极角
float multiply(Point p1,Point p2,Point p0)
{
return ((p1.x-p0.x)*(p2.y-p0.y) -(p2.x-p0.x)*(p1.y-p0.y));
}
float dis(Point p1,Point p2)
{
return sqrt((p1.x-p2.x)*(p1.x -p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
}
void Graham_scan(Point PointSet[],Point ch[],int n,int &len)
{
int i,j,k=0,top = 2;
Point tmp;
for (i=1;i<n;i++)
if ((PointSet[i].y<PointSet[k].y ||((PointSet[i].y==PointSet[k].y)) &&(PointSet[i].x <PointSet[k].x)))
k=i;
tmp =PointSet[0];
PointSet[0]=PointSet[k];
PointSet[k]=tmp;
//按极角大小排序
for (i=1;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
{
if ((multiply(PointSet[j],PointSet[k],PointSet[0])>0)
||((multiply(PointSet[j],PointSet[k],PointSet[0])==0)
&& (dis(PointSet[0],PointSet[j]) < dis(PointSet[0],PointSet[k]))))
{
tmp = PointSet[j];
PointSet[j] = PointSet[k];
PointSet[k] = tmp;
}
}
}
ch[0] = PointSet[0];
ch[1] = PointSet[1];
ch[2] = PointSet[2];
for (i=3;i<n;i++)
{
while (multiply(PointSet[i],ch[top],ch[top-1])>0)
top--;
ch[++top] = PointSet[i];
}
len = top+1;
}
const int maxN = 1000;
Point PointSet[maxN];
Point ch[maxN];
int n;
int len;
int cmp(const void *a,const void *b)
{
Point pa = *(Point *)a;
Point pb = *(Point *)b;
if (pa.x>pb.x)
return 1;
else if((pa.x ==pb.x) &&pa.y>pb.y)
return 1;
else return -1;
}
void solve()
{
int n,i;
cin>>n;
for (i=0;i<n;i++)
cin>>PointSet[i].x>>PointSet[i].y;
Graham_scan(PointSet,ch,n,len);
qsort(ch,len,sizeof(ch[0]),cmp);
for (i=0;i<len;i++)
cout<<ch[i].x<<" "<<ch[i].y<<endl;
}
int main()
{
int n;
cin>>n;
while (n--)
{
solve();
}
}
转载于:https://www.cnblogs.com/zhijzan/archive/2012/04/12/2444963.html
NYOJ - 78 圈水池 【凸包】相关推荐
- nyoj 78:圈水池 【凸包入门】
题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓"勾勒"出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后 ...
- NYOJ 253LK的旅行(凸包 对踵点)
LK的旅行 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 LK最近要去某几个地方旅行,她从地图上计划了几个点,并且用笔点了出来,准备在五一假期去这几个城市旅行.现在希望 ...
- Monotone Chain Convex Hull(单调链凸包)
1 Monotone Chain Convex Hull(单调链凸包)算法伪代码: 2 //输入:一个在平面上的点集P 3 //点集 P 按 先x后y 的递增排序 4 //m 表示共a[i=0...m ...
- 刘墉写给女儿的 忠告
跨一步,就成功 作者:刘墉 刘墉以跟女儿交谈的方式深入探讨处世.使用时间.运动.写作.记忆等问题,更可贵的是他提出了许多切实可行的方法.他谈得非常具体,具体到怎样跟男生打交道.什么时间做什么事情.怎样 ...
- 非常感人非常激发人的潜能的信,你一定要看!
刘墉写给女儿的信 著名美籍华人艺术家.教育家成功培育一双儿女,儿子获哈佛博 士,女儿获布什总统奖,该书写给女儿,教她<跨一步,就成功> 你能拒绝诱惑吗? 孩子,我最近发现你看电视的时间愈来 ...
- 初学者制作VMOS场效应管小功放
VMOS场效应管既有 电子管的优点又有晶体管的优点,用它 制作的功率放大器声音醇厚.甜美,动态范围大.频率响应好,因此近年来在 音响 设备中得到了广泛应用. 大功率的场效应管功率放大器,电.路比较复杂 ...
- dlib库 眨眼 张嘴
这里写目录标题 只有眨眼 重新编写 改为摄像头 加上张嘴 只有眨眼 重新编写 import cv2 as cv import dlib import imutils import numpy as n ...
- 刚開始学习的人制作VMOS场效应管小功放
VMOS场效应管既有电子管的长处又有晶体管的长处,用它制作的功率放大器声音醇厚.甜美,动态范围大.频率响应好.因此近年来在音响设备中得到了广泛应用. 大功率的场效应管功率放大器.电.路比較复杂.制作和 ...
- 计算机计算车速的方法,告别一脸懵逼 简单公式教会你计算车速
[卡车之家 原创]对于货运行业来说,运营效率往往意味着能不能赚到更多的钱.因此,车速就成为很多人买车时关心的热点问题了,那么车辆究竟能跑多快,经济转速下最快时速是多少呢?今天我们就一起来算一算. ● ...
最新文章
- asp从后台调出的公式怎么参与运算_SEOr怎么写一个快速排名的标题
- “输入字符不是 MATLAB 语句或表达式中的有效字符”的解决办法
- 9号团队-团队任务4:每日立会(2018-11-26,2018-11-27)
- php如何压缩txt文件怎么打开,PHP-压缩txt文件,同时保持文件扩展名
- list::splice函数的用法与参数解释
- Python-第三方库requests详解
- FastReport.net 使用记录
- (解题报告)L1-032 Left-pad (20分)——15行代码AC
- js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
- CCF CSP 201809-1 卖菜
- R40使用GPIO中断实现按键功能【原创】
- 操作系统swap对redis的性能的影响以及解决方案
- Express 4.x Node.js的Web框架----《转载》
- java项目-第58期基于ssm的酒店管理系统
- linux wget 整站克隆/仿站 整个网站的静态源码下载到本地 4种扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)
- 据说大学录取率是90%,我对大米的期许是考上高中
- 电商数据分析:FAST指标体系-用户矩阵分析模型
- 安卓模拟器绕过模拟器检测正常用电脑玩手机游戏的最好解决方法
- 本地的项目上传到 Git 仓库的步骤-超详细
- 2012 款斯柯达明锐车行驶中发动机偶尔自动熄火
热门文章
- 当导用模块与包的import与from的问题(模块与包的调用)
- Python功能之反射
- AaronYang WCF教程目录
- 【注册机】Zillions of Games v2.0.1p 注册机
- python量化数据处理小细节2
- python自带的解释器叫做_python学习
- php多文件上传存储到表,PHP 实现一种多文件上传的方法
- oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...
- Java笔记03-Constructor Override
- python命令方式和关键字