POJ 1228 —— “稳定”凸包

POJ 1228 Grandpa's Estate

这是个好题目,同时也是个不和谐的题目(不和谐原因是题目出的存在漏洞,数据弱,而且有些条件没给清楚,为了一个SB错误无限WA之后,终于AC)

 

题意就废了我好长时间,唉……英语不好的鸭梨大……

大意就是爷爷留了块土地给我,然而这块土地是以一些钉子来界定的,题目要做的就是给你一堆钉子的坐标(也就是凸包上部分的点),然后问你能不能唯一确定这块土地。

问了下度娘,这个问题叫做“稳定”凸包问题,那么首先就要了解下“稳定”凸包的性质:(在此感谢XDruid博主)

比方说有4个点:

这4个点可以围成一个凸包,但是原始的凸包可能并不是这个样子的

例如可能是这个样子:

这样我们则称这4个点确定的凸包是”不稳定“的!

那么怎么样才叫稳定呢?

是这个样子:想一想,若像刚才一样,在直线外面加一个点,那么线上的点必定不会属于凸包,要删掉,是吧?

如此以来,问题就很明确了,算法也随之而来了:

我们已经知道了怎么求凸包了(前提),这样一来,只要判断是否有3点或N>=3点共线就可以了~~

表示用的是Graham的变种Andrew……感觉真的很好用:

下面贴代码:

View Code
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;const double EPS = 1e-6;struct point{double x , y;
} p[1010] , chn[1010];bool cmp (point a , point b)
{return (a.y < b.y || (a.y == b.y && a.x < b.x));
}double xmult(point p1 , point p2 , point p3)
{return ((p1.x - p3.x) * (p2.y - p3.y) - (p1.y - p3.y) * (p2.x - p3.x));
}int andrew(int n)
{int len , top = 1;chn[0] = p[0];chn[1] = p[1];for (int i = 2 ; i < n ; i ++){while (top && xmult(p[i] , chn[top] , chn[top - 1]) > EPS) top --;chn[++ top] = p[i];}len = top;chn[++ top] = p[n - 2];for (int i = n - 3 ; i >= 0 ; i --){while (top != len && xmult(p[i] , chn[top] , chn[top - 1]) > EPS) top --;chn[++ top] = p[i];}return top;
}bool judge(int n)  //解释请看下面
{for (int i = 1 ; i < n ; i ++){if ((xmult(chn[i - 1] , chn[i] , chn[i + 1]) != 0) && (xmult(chn[i] , chn[i + 1] , chn[i + 2]) != 0))return false;}return true;
}int main()
{int T , n;scanf("%d" , &T);while (T --){scanf("%d" , &n);for (int i = 0 ; i < n ; i ++) scanf("%lf%lf" , &p[i].x , &p[i].y);if (n < 6) printf("NO\n");else{sort(p , p + n , cmp);int top = andrew(n);if (judge(top)) printf("YES\n");else printf("NO\n");}}return 0;
}

写了这个题后,对凸包的理解真是加深了。

同时,在被WA了N此后(主要是因为读入数据要用double。但是题目上说是整点啊!不明白,如果没看到别人的解题报告,估计要一直WA下去)

昨晚在无限WA后找了XxX师兄,开始以为思路错了,经过他的问答,对这个题目的理解更是加深了!

下面说下代码中【judge】函数的判断原因:

理论支持:叉积 = 0 说明共线!

我们用Andrew算法求出凸包后(栈内不删去共线的点)这些点已经是按一定顺序排好了的~

然后之需要对栈内的点进行叉积判断就可以了~~ 只有当向左与向中间扩展都不满足是,才说明当前点不满足!

所以只要有一个不满足,则说明全部不满足了。

 

做了这个题目,我对之前提出的疑问有了答案。哈哈~~

转载于:https://www.cnblogs.com/hmhard/archive/2013/02/07/2908860.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Application_Error事件中获取当前的Action和Control

ASP.NET MVC程序处理异常时&#xff0c;方法有很多&#xff0c;网上也有列举了6种&#xff0c;下面是使用全局处理在Global.asax文件的Application_Error事件中实现。既然是ASP.NET MVC,我需要捕捉到Controller和Action名称。怎样实现可以参考下面代码&#xff1a; 程序运行结果…

1.关于浏览器

一、认识主流浏览器 Chrome谷歌浏览器Safari苹果浏览器Firefox火狐浏览器Opera欧朋浏览器 二、浏览器内核是什么&#xff1f; 三、五大浏览器&#xff0c;四大内核 四、前端做网页开发用什么浏览器&#xff1f; Chrome谷歌浏览器。

实时数据交换平台 - BottledWater-pg with confluent

标签 PostgreSQL , Bottled Water , Kafka , Confluent , IoT 背景 想必大家都在图书馆借过书&#xff0c;小时候有好看的书也会在小伙伴之间传阅。 借书和数据泵有点类似&#xff0c;一份数据通过数据泵实时的分享给订阅者。 例如在IoT的场景中&#xff0c;有流式分析的需求&a…

asp.net缓存(二)

ASP.NET页面局部缓存 有时缓存整个页面是不现实的&#xff0c;因为页的某些部分可能在每次请求时都需要变化。在这些情况下&#xff0c;只能缓存页的一部分。顾名思义&#xff0c;页面部分缓存是将页面部分内容保存在内存中以便响应用户请求&#xff0c;而页面其他部分内容则为…

(七)Maven使用的最佳实践

这里说一下在使用Maven过程中不是必须的&#xff0c;但十分有用的几个实践&#xff0c;关键时刻或许能解决您的问题。 1.设置MAVEN_OPTS环境变量 通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx512m&#xff0c;因为Java默认的最大可用内存往往不能够满足Maven运行的需要&#xff…

android beam传输速率,无线网络的速率为何不能达到最大值

1、无线速率可以达到最大值&#xff0c;只是发送速率和传输流量是两个概念&#xff0c;通俗点讲&#xff0c;无线的发送速率是把信号以指定速率发出去(信号好的时候以高速率发&#xff0c;信号差的时候以低速率发)。传输流量是指单位时间内传输的数据量&#xff0c;大部分用户关…

【SMTP 补录 Apache服务】

【补录&#xff0c;续】1.【配置空壳邮件接受】【mta】【前置&#xff1a;在/etc/named.rfc1912.zones 添加一个可以接受邮件的域hxl.org&#xff08;与你数据库中写的向对应&#xff09;,这个域的所在ip就是你机子的&#xff0c;因为要从你的机子转发】 【配置该机的vim/etc/…

开启chrome默认支持ipv6

在快捷方式后面的属性后面输入 --enable-ipv6 以下为转载&#xff1a; [转载]chrome开启或关闭IPV6方法 (2012-05-27 17:54:06) 转载▼ 标签&#xff1a; 转载 分类&#xff1a; 技术 原文地址&#xff1a;chrome开启或关闭IPV6方法作者&#xff1a;余鲲涛 chrome和firefox都是…

ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗

iqoo neo3在不高的价格上还保证了自己的品质&#xff0c;有很高的性能&#xff0c;很不错的屏幕。那么这款手机可以支持无线充电吗&#xff1f;小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充&#xff0c;属于小刀&#…

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号&#xff1a;T | T在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问&#xff0c;故障处理人员可通过console, ssh等方式登录到操作系统上&#xff0c;在shell上执行…

app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上

上一篇文章写的是服务器端利用Servlet 返回JSON字符串&#xff0c;本文主要是利用android客户端访问服务器端链接&#xff0c;解析JSON格式数据&#xff0c;放到相应的位置上。 首先&#xff0c;android程序的布局文件main.xml 1 <LinearLayout xmlns:android"http://s…

Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

Android IOS WebRTC 音视频开发总结&#xff08;八十七&#xff09;-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现&#xff0c;作者&#xff1a;weizhenwei &#xff0c;文章最早发表在编风网&#xff0c;微信ID&#xff1a;befoio 支持原创&#x…

为网格布局图片打造的超炫 CSS 加载动画

今天&#xff0c;我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果。您可以把这些效果用在你的作品集&#xff0c;博客或任何你想要的网页中。设置很简单。我们使用了下面这些工具库来实现这个效果&#xff1a; Normalize.css 来替代传统的 CSS 复位&…

一个YII社区学习网站

2019独角兽企业重金招聘Python工程师标准>>> https://getyii.com/ 转载于:https://my.oschina.net/u/2552765/blog/803311

MapReduce实现手机上网日志分析(分区)

一、问题背景 实际业务的需要&#xff0c;比如以移动为例&#xff0c;河南的用户去了北京上网&#xff0c;那么他的上网信息默认保存在了北京的基站&#xff0c;那么我们想要查询北京地区的上网日志信息默认也包含了其他地区用户的在本区的上网信息&#xff0c;否则只能扫描日志…

计算机专业四次评估,教育部第四次“计算机专业”学科评估,四所高校获A+评级...

随着2017年权威的第四次学科评估结果出炉后&#xff0c;相信很多高校学科上实力的争议应该可以平息了。这也是国内官方的学科排名&#xff0c;一共分为12等。入围学科的最高等级为A&#xff0c;最低评级为C-&#xff0c;如果在同一评级内&#xff0c;按学校代码先后依次排序。本…

正则领悟

入门 学习正则表达式的最好方法是从例子开始&#xff0c;理解例子之后再自己对例子进行修改&#xff0c;实验。下面给出了不少简单的例子&#xff0c;并对它们作了详细的说明。 假设你在一篇英文小说里查找hi&#xff0c;你可以使用正则表达式hi。 这几乎是最简单的正则表达式了…

html css精灵,谈谈CSS Sprites(css精灵)

CSS Sprites在国内很多人叫css精灵&#xff0c;其实这个技术不新鲜&#xff0c;这个技术老到什么程度呢&#xff0c;我不敢确定&#xff0c;但是我看到最早的关于CSS Sprites是在Dave Shea的《CSS Sprites: Image Slicing’s Kiss of Death》&#xff0c;时间是March 05, 2004 …

分布式搜索 Elasticsearch —— 节点实例化

为什么80%的码农都做不了架构师&#xff1f;>>> 要连接到集群&#xff0c;首先要告诉集群&#xff1a;你是谁&#xff0c;你有什么特征。在 ES 中体现为实例化节点。 ES 通过 org.elasticsearch.node.NodeBuilder 的 build() 或者 node() 方法实例化节点&#xff0…

(转)在ios android设备上使用 Protobuf (使用dll方式)

自&#xff1a;http://game.ceeger.com/forum/read.php?tid13479 如果你的工程可以以.Net 2.0 subset模式运行&#xff0c;请看这个帖子中的方法。 地址&#xff1a;http://game.ceeger.com/forum/read.php?tid14359&fid27 如果只能以.Net 2.0下运行&#xff0c;就可以继…