题意
给出两个凸包 A , B A,B A,B,有 q q q 次询问,每次询问给出向量 ( d x , d y ) (dx,dy) (dx,dy),问 B B B 所有点移动 ( d x , d y ) (dx,dy) (dx,dy) 是否与 A A A 有交集。
其中, ∣ A ∣ , ∣ B ∣ , q ≤ 1 0 5 |A|,|B|,q\le 10^5 ∣A∣,∣B∣,q≤105。
分析
前置知识——闵可夫斯基和
定义两个点集 A , B A,B A,B 的闵可夫斯基和为 C = { a + b ∣ a ∈ A , b ∈ B } C = \{a+b|a\in A, b \in B\} C={
a+b∣a∈A,b∈B}。
如下图,粉色区域是一个四边形和一个三角形的闵可夫斯基和。
结论:两凸包的闵可夫斯基和仍然是一个凸包。(证明略)
求闵可夫斯基和
因为两个凸包的所有边都会出现在他们的闵可夫斯基和上。因此,我们按边的极角序来加入边,起点为两个凸包的起点相加。由于两个凸包的边本身就是有序的,因此直接归并排序即可。复杂度是 O ( n + m ) O(n+m) O(n+m)。
回到题目
令 C = { a − b ∣ a ∈ A , b ∈ B } C=\{a-b|a\in A, b \in B\} C={ a−b∣a∈A,b∈B}。则题目等价于判断 ( d x