[JSOI2018] 战争(闵可夫斯基和 + 二分)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

给出两个凸包 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,q105

分析

前置知识——闵可夫斯基和

定义两个点集 A , B A,B A,B 的闵可夫斯基和为 C = { a + b ∣ a ∈ A , b ∈ B } C = \{a+b|a\in A, b \in B\} C={ a+baA,bB}
如下图,粉色区域是一个四边形和一个三角形的闵可夫斯基和。
在这里插入图片描述
结论:两凸包的闵可夫斯基和仍然是一个凸包。(证明略)

求闵可夫斯基和

因为两个凸包的所有边都会出现在他们的闵可夫斯基和上。因此,我们按边的极角序来加入边,起点为两个凸包的起点相加。由于两个凸包的边本身就是有序的,因此直接归并排序即可。复杂度是 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={ abaA,bB}。则题目等价于判断 ( d x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值