旋转卡壳

自古美人都是妖i 提交于 2019-12-06 11:56:44

例题:P1452.

题意:找到所有点对的最大距离。

一个凸包可以把所有点给包含进去,很明显最大距离点对是凸包上的点的点对。于是现在求凸包的最长直径。

旋转卡壳

依次按照极角枚举凸包上的边,找出与这条边最远距离的顶点,寻找这个点可以通过叉积算三角形面积实现。很明显顺次枚举边时,顶点也是顺次移动的,可以证明移动顶点复杂度为\(O(n)\)。对于每个边和其对应顶点所形成的三角形,答案与这三条边取\(max\)就行了。

为什么对于一条边找最远顶点一定包含了最长直径?可以发现直径对应的两个顶点,一定存在一个包含了这两个点和这两个点中某个点的相邻点的一个三角形,那么也一定会更新到这条边。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!