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