码迷,mamicode.com
首页 > 其他好文 > 详细

关于2016.12.12——T1的反思:凸包的意义与应用

时间:2016-12-12 23:58:22      阅读:646      评论:0      收藏:0      [点我收藏+]

标签:分享   http   之间   写法   连线   计算机   技术   应该   考试   

2016.12.12  T1

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

  技术分享

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

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

技术分享

好像是对的啊:

技术分享

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

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

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

技术分享

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

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

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

  拓展:

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

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

技术分享

 

总结:

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

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

 

你还能获得什么启发呢?

 

关于2016.12.12——T1的反思:凸包的意义与应用

标签:分享   http   之间   写法   连线   计算机   技术   应该   考试   

原文地址:http://www.cnblogs.com/JeffLee-AuB/p/6165992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!