题意
给出两个凸包 A,BA,BA,B,有 qqq 次询问,每次询问给出向量 (dx,dy)(dx,dy)(dx,dy),问 BBB 所有点移动 (dx,dy)(dx,dy)(dx,dy) 是否与 AAA 有交集。
其中,∣A∣,∣B∣,q≤105|A|,|B|,q\le 10^5∣A∣,∣B∣,q≤105。
分析
前置知识——闵可夫斯基和
定义两个点集 A,BA,BA,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}。则题目等价于判断 (dx,dy)(dx,dy)(dx,dy) 是否在凸包 CCC 中。
而 CCC 则是 AAA 与 −B-B−B 的闵可夫斯基和。然后就是一个点在凸包内的问题了,先判断一下点和

这篇博客介绍了如何利用闵可夫斯基和解决JSOI2018中关于凸包和向量移动的交集查询问题。通过计算两个凸包的闵可夫斯基和,并转化为判断点在凸包内的二分查找方法,实现了O(n+qlogn)的时间复杂度解决方案。
最低0.47元/天 解锁文章
3390

被折叠的 条评论
为什么被折叠?



