题目描述
给出平面上n个点,每个点有一种颜色,问不同色的点之间最远距离是多少。
分析
首先有一个显然的结论是最远点必定在凸包上。
然后有一个显然的结论是三分是错的。
这道题的核心在于minkovski addition
minkovski addition是在点集上的二元运算,得到一个新的点集C。
简单来说就是从A点集和
对应地我们可以定义minkovski difference,只需要将B点集中的点全部以原点为中心作对称点,然后求
显然我们直接地求这个玩意是O(n2)的,并没有什么卵用。
但实际上我们求两个凸包的minkovski addition是可以做到线性的,只需要将两个凸包的边集按照极角序合并一下就可以了。
简单证明一下
- 两个凸包的minkovski addition必定是凸包
- 原来两个凸包上的边必定在新的凸包上出现
- 新的凸包上的边必定在原来两个凸包上出现
证毕
然后就可以做题了。考虑按照颜色分治一下,求一下凸包再求minkovski difference,问题就变成了求离原点的最远点,扫描一下就可以了。
时间复杂度O(nlogn)
空间复杂度O(n)