洛谷 P4557 战争:凸包+闵可夫斯基和

该博客介绍了洛谷P4557题目的解题思路,涉及计算几何中的凸包和平移操作。题目要求判断在给定向量V作用下平移后的凸包B'是否与凸包A相交,这等价于寻找A和-B的闵可夫斯基和中的特定向量。博主提供了利用两个凸包边的归并来构建闵可夫斯基和的解决方案,并进行了点在凸包内的判断。

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

题意:

给出两个凸包AAABBB,有若干询问,每次给出一个向量V=(x,y)V = (x,y)V=(x,y),将BBB按照VVV的方向平移到B′B'B,然后回答AAAB′B'B是否相交。

题解:

题目的条件等价于 存在点a,ba,ba,b,其中a∈A,b∈Ba\in A, b \in BaA,bB,且满足a=b+Va = b + Va=b+V
则得到等价条件V=a−bV = a - bV=ab
VVV要在AAA−B-BB闵可夫斯基和中。
显然−B-BB也是一个凸包,因此我们只需要求两个凸包的闵可夫斯基和
而两个凸包的闵可夫斯基和也一定是个凸包,而且这个新凸包的每条边(看作向量),一定是原来两个凸包的边(看作向量)。实际上就是归并转一下两个凸包就行了
然后判断点在凸包内。
算是做的第一道真正意义的计算几何题吧。。。太菜了。。。

Code:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000 + 50;
template<class type> 
struct point{
   
   
    type x,y;
    point(){
   
   };
    point(type x_,type y_):x(x_),y(y_){
   
   }
    point operator +(const point &p)const {
   
   <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值