2016.12.12  T1

  给n个圆,保证圆圆相离,求将圆围起来的最小周长。n<=100

  

  就像上图。考场上,我就想用切线的角度来做凸包。以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度来判断。

  这就是下切线(我自己瞎编的名字):

好像是对的啊:

然后我就保证必AC的希望,用这种写法交了,然后就只得了N=2的暴力分。。。

自以为是正解,却落得如此下场。。。

为什么?这样不对吗?借用学长的力量,果然被Hack掉了:

  这种情况,圆心排序后,检测的顺序并不是圆上的切点的顺序,自然就会挂。

  蓝瘦香菇之后,我开始反思我对凸包的理解:为什么不能这么做?凸包的本质是什么?上面看到这样一句话:“检测的顺序并不是圆上的切点的顺序”。顺序,是关键么?如果我们可以把圆上所又点加入数组(当然,这是个无限集合),那么每一个凸包上的点都来自于这个集合内的点,于是,就可以用凸包来做了。但是计算机实际上是一个有限状态机,无限状态的问题是没有办法解决的。那么就是说,只有拿来排序的点是和凸包上的点的顺序一致,那么,做凸包就没有问题,否则,就有不能这样做。回过头来,再来看这道题:哪些点是和凸包上的点顺序一定一致的呢?当然是圆上的点咯。凸包上的点,除了弧线,就是切线了。弧线不好表示,而切线可以用切点确定,而弧线有恰好两端都在切点上。所以,就可以拿切点来做为排序依据。那么解法就浮出水面了。

  还好,这样一来,我对凸包的理解又深了一步,还有下次考试嘛↖(^ω^)↗!除此之外,还有个考试技巧:N<=100。。。nlogn就想AC?等着WA吧!!!

  拓展:

  如果圆的半径相等呢?可不可以用圆心做凸包呢?

  可以咯。可以把圆心上的连线平移到圆上,是等价的:

总结:

1.拿来排序的点应该和凸包上的点的顺序一致

2.可以利用特殊点来确定奇形凸包

你还能获得什么启发呢?

关于2016.12.12——T1的反思:凸包的意义与应用的更多相关文章

  1. JZOJ2020年8月12日提高组反思

    JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...

  2. 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 ...

  3. 2016年12月30日 星期五 --出埃及记 Exodus 21:25

    2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...

  4. 2016年12月29日 星期四 --出埃及记 Exodus 21:24

    2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...

  5. 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,若有 ...

  6. 2016年12月27日 星期二 --出埃及记 Exodus 21:22

    2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...

  7. c++中变量声明和变量定义的区别。2016年12月6日

    整个流程: 1.程序告诉cpu,程序将要使用一个变量.(暂时不一定用到,先说一下.) 2.程序告诉CPU,程序现在就要使用一个变量.(现在就用) 3.cpu按照这个变量的类型,把内存划分出几个单位(b ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. 我理解的Sitecore开发流程

    Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...

  2. word20161217

    p-node / p 节点 package / 程序包 packet / 数据包 packet assembler/disassembler, PAD / 分组拆装器 packet header / ...

  3. python , angular js 学习记录【3】

    1.Alembic是SQLAlchemy作者编写的Python数据库迁移工具.用它实现模型类和数据库的同步更新.(安装以及操作步骤 使用Alembic迁移数据库) 使用Alembic添加数据库字段操作 ...

  4. Libvlc API 简单说明 [转]

    Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...

  5. python print及格式化

    print(value,sep=' ',end='\n',file=sys.stdout, flush=False) sep=' '默认空格 print('hello','world') #hello ...

  6. C#对象先序列化然后反序列化时间丢失八小时的问题

    把对象JSON序列化,然后反序列化后发现时间少了八小时.因为在东八区,所以序列的时候按照1970-01-01:08:00:00为基数取得差值,而反序列化的时候以1970-01-01:00:00:00作 ...

  7. input函数出现的问题(Python)

    参考书<A Learner's Guide to Programming Using the Python Language>,写下如下的程序: # coding=utf-8 # 以上是为 ...

  8. C++ Bitstream类

    从raknet上剥下来的 比较适用于前后端通讯,可以对BitStream进行二次封装,方便使用. BitStream.h: #ifndef __BITSTREAM_H #define __BITSTR ...

  9. sqlserver添加主键

    sqlServer中给表添加主键的sql: alter table market_media_medical_history alter column pk_id bigint not null; a ...

  10. html JS 打开本地程序及文件

    在网页打开本地应用程序示例: 一.在本地注册表自定义协议:以自定义调用Viso为例 1.在HKEY_CLASSES_ROOT下添加项ZVISIO. 2.修改ZVISIO项下的"(默认)&qu ...