关于2016.12.12——T1的反思:凸包的意义与应用
2016.12.12 T1
给n个圆,保证圆圆相离,求将圆围起来的最小周长。n<=100

就像上图。考场上,我就想用切线的角度来做凸包。以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度来判断。
这就是下切线(我自己瞎编的名字):

好像是对的啊:

然后我就保证必AC的希望,用这种写法交了,然后就只得了N=2的暴力分。。。
自以为是正解,却落得如此下场。。。
为什么?这样不对吗?借用学长的力量,果然被Hack掉了:

这种情况,圆心排序后,检测的顺序并不是圆上的切点的顺序,自然就会挂。
蓝瘦香菇之后,我开始反思我对凸包的理解:为什么不能这么做?凸包的本质是什么?上面看到这样一句话:“检测的顺序并不是圆上的切点的顺序”。顺序,是关键么?如果我们可以把圆上所又点加入数组(当然,这是个无限集合),那么每一个凸包上的点都来自于这个集合内的点,于是,就可以用凸包来做了。但是计算机实际上是一个有限状态机,无限状态的问题是没有办法解决的。那么就是说,只有拿来排序的点是和凸包上的点的顺序一致,那么,做凸包就没有问题,否则,就有不能这样做。回过头来,再来看这道题:哪些点是和凸包上的点顺序一定一致的呢?当然是圆上的点咯。凸包上的点,除了弧线,就是切线了。弧线不好表示,而切线可以用切点确定,而弧线有恰好两端都在切点上。所以,就可以拿切点来做为排序依据。那么解法就浮出水面了。
还好,这样一来,我对凸包的理解又深了一步,还有下次考试嘛↖(^ω^)↗!除此之外,还有个考试技巧:N<=100。。。nlogn就想AC?等着WA吧!!!
拓展:
如果圆的半径相等呢?可不可以用圆心做凸包呢?
可以咯。可以把圆心上的连线平移到圆上,是等价的:

总结:
1.拿来排序的点应该和凸包上的点的顺序一致
2.可以利用特殊点来确定奇形凸包
你还能获得什么启发呢?
关于2016.12.12——T1的反思:凸包的意义与应用的更多相关文章
- JZOJ2020年8月12日提高组反思
JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...
- 2016年12月31日 星期六 --出埃及记 Exodus 21:26
2016年12月31日 星期六 --出埃及记 Exodus 21:26 "If a man hits a manservant or maidservant in the eye and d ...
- 2016年12月30日 星期五 --出埃及记 Exodus 21:25
2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...
- 2016年12月29日 星期四 --出埃及记 Exodus 21:24
2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...
- 2016年12月28日 星期三 --出埃及记 Exodus 21:23
2016年12月28日 星期三 --出埃及记 Exodus 21:23 But if there is serious injury, you are to take life for life,若有 ...
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- c++中变量声明和变量定义的区别。2016年12月6日
整个流程: 1.程序告诉cpu,程序将要使用一个变量.(暂时不一定用到,先说一下.) 2.程序告诉CPU,程序现在就要使用一个变量.(现在就用) 3.cpu按照这个变量的类型,把内存划分出几个单位(b ...
- 2016年12月26日 星期一 --出埃及记 Exodus 21:21
2016年12月26日 星期一 --出埃及记 Exodus 21:21 but he is not to be punished if the slave gets up after a day or ...
- 2016年12月25日 星期日 --出埃及记 Exodus 21:20
2016年12月25日 星期日 --出埃及记 Exodus 21:20 "If a man beats his male or female slave with a rod and the ...
随机推荐
- 百度地图多点路径加载以及调整页面js
$(document).ready(function () { /*用正则表达式获取url传递的地址参数,split后获得地址数组*/ bmap = new BMap.Map('mapcontaine ...
- Java Native Interface 五 JNI里的多线程与JNI方法的注册
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI里的多线程 在本地方法里写有关多线程的 ...
- tomcat 快速部署静态文件
server.conf配置: <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software ...
- HTTP返回码中301与302的区别 (转载)
一.官方说法 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved). 302 ...
- linux下编译gcc6.2.0
linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...
- toast组件小结
简介:toast是"吐司"的意思,它属于android杂项组件,是一个简单的消息提示框,类似于javascript中的alert. 作用 显示文本 显示图片 显示图文 3.常用方法 ...
- PHP基础
$a=10; //$b="hello";//$a=(string)$a; 强制转换A的类型为字符串 //settype($a,"string");//var_d ...
- Redis的入门及注意事项
1.redis简介 Remote Dictionary Server Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中, ...
- Target runtime com.genuitec.runtime.generic.jee60 is not defined
转载自:http://jingyan.baidu.com/article/d7130635338e3f13fdf47518.html 用eclipse加载别人的工程,报错Target runtime ...
- LeetCode 162 Find Peak Element
Problem: A peak element is an element that is greater than its neighbors. Given an input array where ...