#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node
{
int x,y;
};
node vex[];//存入的所有的点
node stackk[];//凸包中所有的点
int xx,yy;
bool cmp1(node a,node b)//排序找第一个点
{
if(a.y==b.y)
return a.x<b.x;
else
return a.y<b.y;
}
bool cmp(node a,node b)//排序找第一个点
{
if(a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
int cross(node a,node b,node c)//计算叉积
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
bool cmp2(node a,node b)//极角排序另一种方法,速度快
{
if(atan2(a.y-yy,a.x-xx)!=atan2(b.y-yy,b.x-xx))
return (atan2(a.y-yy,a.x-xx))<(atan2(b.y-yy,b.x-xx));
return a.x<b.x;
}
int main()
{
int t,L,n,m;
cin>>n;
while(n--)
{
cin>>m;
int i;
for(i=; i<m; i++)
{
scanf("%d%d",&vex[i].x,&vex[i].y);
} memset(stackk,,sizeof(stackk)); sort(vex,vex+m,cmp1);
stackk[]=vex[];
xx=stackk[].x;
yy=stackk[].y;
sort(vex+,vex+m,cmp2);//cmp2是更快的,cmp更容易理解
stackk[]=vex[];//将凸包中的第两个点存入凸包的结构体中
int top=;//最后凸包中拥有点的个数
for(i=; i<m; i++)
{
while(i>=&&cross(stackk[top-],stackk[top],vex[i])<) //对使用极角排序的i>=1有时可以不用,但加上总是好的
top--;
stackk[++top]=vex[i]; //控制<0或<=0可以控制重点,共线的,具体视题目而定。
} sort(stackk,stackk+top+,cmp);
for(i=;i<=top;i++)
printf("%d %d\n",stackk[i].x,stackk[i].y); }
}

NYOJ 圈水池的更多相关文章

  1. 圈水池 nyoj 78 凸包算法

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

  2. nyist 78 圈水池

    http://acm.nyist.net/JudgeOnline/problem.php?pid=78 圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一个 ...

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

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

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

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

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

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

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

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

  7. nyoj 78-圈水池 (凸包)

    78-圈水池 内存限制:64MB 时间限制:3000ms 特判: No 通过数:5 提交数:6 难度:4 题目描述: 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来, ...

  8. nyoj 27 水池数目

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地 ...

  9. NYOJ 27.水池数目-DFS求连通块

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地 ...

随机推荐

  1. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  2. JS控制只能输入数字并且最多允许小数点两位

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. IntelliJ IDEA连接TFS local workspace无法正常签入

    前几天为了便于在本地修改,将TFS workspace的类型从Server修改为Local.基于Visual Studio的开发正常没有问题,用IntelliJ IDEA时却提示以下错误: Error ...

  4. day_5.20 py

    列表去重的两种方法 1.自己写程序  for循环 2.直接变为set类型

  5. 170830、oracle密码过期ORA-28002: 7天之后口令将过期的解决方法

    登陆oracle数据库时错误信息提示:“ORA-28002: 7 天之后口令将过期”. 原因:oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME= ...

  6. 使用ELK收集分析MySQL慢查询日志

    参考文档:https://www.cnblogs.com/bixiaoyu/p/9638505.html MySQL开启慢查询不详述 MySQL5.7慢查询日志格式如下 /usr/local/mysq ...

  7. String和datetime在SQL中和在C#中相互转换方法总结

    Custom Date and Time Format Strings   <= https://docs.microsoft.com/en-us/dotnet/standard/base-ty ...

  8. 架构师如何借鉴他人经验快速成长? | 2018GIAC上海站日程上线!

    随着网络技术的迅猛发展,越来越多的企业需要紧跟技术发展潮流以应对层出不穷的业务场景变化.如今多“语言”开发百花齐放,选择何种语言才能在合适的场景中发挥最大价值?互联网业务架构经过了长年的发展,已然朝着 ...

  9. vins-mono源码解读

    https://blog.csdn.net/q597967420/article/details/76099409

  10. nginx的proxy_pass路径转发规则浅析(末尾/问题)

    源地址 : https://www.zifangsky.cn/917.html 一 location匹配路径末尾没有 / 此时proxy_pass后面的路径必须拼接location的路径:   1 2 ...