【LuoguP4557】[JSOI2018]战争

[JSOI2018] 战争(闵可夫斯基和 + 二分) 题意 给出两个凸包 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}。 阅读详情

题目链接

题意

给你两个点集。
q次询问 , 每次把其中一个点集往一个方向移动 , 问两个点集的凸包还有没有交。

Sol

闵可夫斯基和板子题。
把问题做如下转换:

我们本来两个凸包相交是相当于是对于移动向量 c c c 来说 , 存在分别在两个点集中的向量 a , b a,b a,b 有 b + c = a b+c=a b+c=a
也就是 c = a − b , c = a + ( − b ) c=a-b, c=a+(-b) c=a−b,c=a+(−b)
我们先求出第一个点集的凸包和第二个点集的按原点对称后的凸包。
现在要做的就是求出一个凸多边形 C C C 满足两个点集中的任意一对向量的和在该凸多边形内部。
之后我们就只需要判断点是否在凸包内。

这个就可以用闵可夫斯基和来解决。

求解方法:
首先求出这两个向量集合构成的凸包。
然后以按照最小向量和为起点对所有凸包上的边极角排序,一个个顺次连起来就做完了。
做完后由于可能出现共线情况就再求一次凸包。

关于判断点是否在凸包内:
以凸包左下角的点为极点 , 二分找到第一个极角小于给定向量的边(没有则不在凸包内) , 判断下一条边的向量和 给定向量到这个向量差向量 的方向关系 , 如果在左边则给定向量不在凸包内。

#include<bits/stdc++.h>
using namespace std;
#define Set(a,b) memset(a,b,sizeof(a))
template<class T>inline void init(T&x){
	x=0;char ch=getchar();bool t=0;
	for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') t=1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+(ch-48);
	if(t) x=-x;return;
}typedef long long ll;
typedef double R;
const int N=1e5+10;
const R PI=acos(-1),eps=1e-10;
int n,m,q;
struct point{
	R x,y;
	point(R _x=0.0,R _y=0.0){x=_x,y=_y;}
	inline bool operator <(const point b)const{return x<b.x||(x==b.x&&y<b.y);}
	inline R operator *(const point b)const{return x*b.y-b.x*y;}
	inline point operator *(const R d){return point(x*d,y*d);}
	inline point operator /(const R d){return point(x/d,y/d);}
	inline point operator +(const point b){return point(x+b.x,y+b.y);}
	inline point operator -(const point b){return point(x-b.x,y-b.y);}
	inline R len(){return sqrt(x*x+y*y);}
}P1[N],P2[N];
inline int fcmp(R x){if(x>eps) return 1;if(x<-eps) return -1;return 0;}
inline bool cmp(point A,point B){return A*B>0||(A*B==0&&A.len()<B.len());}
inline void Convex_Hull(point*P,int&n){
	sort(P+1,P+1+n);point Base=P[1];
	for(int i=n;i;--i) P[i]=P[i]-Base;
	sort(P+2,P+1+n,cmp);int r=1;
	for(int i=2;i<=n;++i) {while(r>1&&(P[i]-P[r])*(P[r]-P[r-1])>=0) --r;P[++r]=P[i];}
	n=r;for(int i=1;i<=n;++i) P[i]=P[i]+Base;
	return;
}
struct line{
	point A,B;R ang;
	line(point _A=point(),point _B=point()){A=_A,B=_B-_A,ang=atan2(B.y,B.x);}
	inline bool operator <(const line b)const{return ang<b.ang;}
};
inline void Minkowski_Sum(point*A,point*B,int n,int m,point*C,int&node){
	A[n+1]=A[1],B[m+1]=B[1];node=0;
	static point L1[N],L2[N];int l1=0,l2=0;
	for(int i=1;i<=n;++i) L1[i]=A[i+1]-A[i];
	for(int i=1;i<=m;++i) L2[i]=B[i+1]-B[i];
	point Base=A[1]+B[1];C[node=1]=Base;
	l1=l2=1;
	while(l1<=n&&l2<=m) ++node,C[node]=C[node-1]+(L1[l1]*L2[l2]>=0? L1[l1++]:L2[l2++]);
	while(l1<=n) ++node,C[node]=C[node-1]+L1[l1++];
	while(l2<=m) ++node,C[node]=C[node-1]+L2[l2++];
	Convex_Hull(C,node);return;
}
point Ans[N<<1];int node=0;
inline bool Judge(point A){// 点是否在凸包内
	if(A*Ans[2]>0||A*Ans[node]<0) return 0;
	int p=lower_bound(Ans+1,Ans+1+node,A,cmp)-Ans-1;
	return (A-Ans[p])*(Ans[p%node+1]-Ans[p])<=0;
}
int main()
{
	init(n),init(m),init(q);
	int x,y;
	for(int i=1;i<=n;++i) {
		init(x),init(y);
		P1[i]=point(x,y);
	}
	for(int i=1;i<=m;++i) {
		init(x),init(y);
		x=-x,y=-y;
		P2[i]=point(x,y);
	}
	Convex_Hull(P1,n);
	Convex_Hull(P2,m);
	Minkowski_Sum(P1,P2,n,m,Ans,node);
	point base=Ans[1];
	for(int i=1;i<=node;++i) Ans[i]=Ans[i]-base;
	for(int i=1;i<=q;++i) {
		init(x),init(y);
		point B=point(x,y)-base;
		if(Judge(B)) puts("1");
		else         puts("0");
	}
	return 0;
}
Cibersort免疫浸润 --- 详细教程 免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。 阅读详情

相关推荐

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1438

JSOI2018 战争 题解

JSOI2018 战争 题解 题目传送门 假设A部落占领的点集为AAA,B部落的为BBB。 则问题转换成,给你一个向量vvv。判断是否∃a∈A,b+v=a,(b∈B)\exists a\in A,b+v=a,(b\in B)∃a∈A,b+v=a,(b∈B) 则是否存在a−b=va-b=va−b=v 若我们可以处理出a−ba-ba−b的点集CCC。问题就转换成查询一个向量是否在一个凸包内。 我们将所有BBB中的点乘上−1-1−1。得到B′B'B′。 然后处理出向量AAA和BBB的闵科夫斯基和。关于闵科夫斯基和

qq_42925924的博客 313

从数据到图片:手把手构建FMCW雷达人体行为识别数据集(行走、跌倒、喝水等6类动作)

本文详细解析了如何利用FMCW雷达构建人体行为识别数据集,涵盖行走、跌倒、喝水等6类动作。通过多普勒特征可视化、图像标准化处理和自动化流水线设计,将原始雷达信号转化为高质量时频图像数据集,为智能家居和健康监护等应用提供可靠数据支持。

weixin_30706691的博客 384

JSOI2018(战争-Minkowski sum)

给你2个点集,分别对这2个点集求凸包A,B,每次询问问凸包B平移向量(dx.dy)(dx.dy)后是否与凸包A有公共点。点集大小n,m,询问次数q的范围为1e5 b⃗ +(dx,dy)=a⃗ \vec{b}+(dx,dy)=\vec{a} (dx,dy)=a⃗ −b⃗ (dx,dy)=\vec{a}-\vec{b} 因此合法的(dx,dy)(dx,dy)范围为:A和-B的Minkowski

nike0good |Oier&ACMer | 熟能生巧 2155

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大。能引用K大的成果也是自己的荣幸,不便之处还请K大多多包涵,在此引用只是为方便自己日常学习,部分参数表里根据自身情况,增加了相应参数。 1.安装及下载Ardupilot官方固件: VTOL固件的来源可分为Ardupilot官方固...

u011322358的博客 3万+

强化学习-----DQN(Deep Q-network)

DQN(Deep Q-Network)是一种基于深度学习和强化学习的算法,由DeepMind提出,用于解决离散动作空间下的马尔科夫决策过程(MDP)问题。它是首个成功将深度学习应用于解决强化学习任务的算法之一。DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。那什么是Q-leaning?可以看上一篇文章Q-learning是一种经典的强化学习算法,用于解决马尔可夫决策过程(Markov Decision Process,MDP)中的控制问题。

qq_74722169的博客 2万+

[JSOI2018]战争(凸包)

#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #define ll long long using namespace std; const ll N=1e5+10; struct Node { ...

冷月寒笙的博客 139

如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈。这篇文章解决的问题是在绘图时候的闪烁问题。其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理解是比较适合于在一个完整的窗口当中绘图。如果要在一个窗口当中的内部容器或者控件内画图的话就不太适合,通常按照前述的方法设置后没有任何效果。对于在窗口内部的绘图的来说,比较有效的方法是在内存当中开辟一块

z20110411的博客 4795

「JSOI2018」战争

「JSOI2018」战争 解题思路 我们需要每次求给一个凸包加上一个向量后是否与另外一个凸包相交,也就是说是否存在 \[ b\in B,(b+w)\in A \] 这里 \(A, B\) 表示凸包内部的点集,可以转化一步变成 \[ a\in A,b \in B,b+w=a \\ w =a -b \] 那相当于对 \(A,(-B)\) 作闵可夫斯基和,判断 \(w\) 是否在新的凸包内部,把新的凸...

weixin_30767921的博客 215

SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度

本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。

weixin_29196891的博客 318

密码学小白必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学初学者提供了系统获取和阅读三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文的实战指南。详细介绍了通过IACR官方渠道、ePrint预印本等权威资源免费下载论文的方法,并分享了高效筛选、精读核心章节及构建个人知识体系的具体策略,帮助读者快速切入密码学研究前沿。

weixin_28363123的博客 406

BZOJ5317:[JSOI2018]战争(闵可夫斯基和)

令 a∈A,b∈Ba\in A,b\in Ba∈A,b∈B 则移动向量 ω\omegaω 使得存在 b+ω=ab+\omega=ab+ω=a 那么 ω\omegaω 需要满足 ω=a−b\omega=a−bω=a−b 黑科技:闵可夫斯基和 直接构造闵可夫斯基和 C=a+(−b)C={a+(−b)}C=a+(−b) 余下问题便是判断输入的移动向量是否在 CCC 内 可以强行使凸包的最下面为 (0,0...

Cyhlnj 580

Lammps纳米压痕接触面积—Matlab接触面积计算(两种方法)

Lammps纳米压痕接触面积计算

Rockyoung 5449

JSOI2018R2游记

ZJOIR2自爆选手来旅游啦! Day0: 试机时发现本机配备有NOI linux虚拟机,可自行选用。 写发NTT,百万多项式乘法O2下1.3s,速度还行。 点开配置,似乎跟评测机配置一样。 感觉比上次SHOI把我送掉20(+100?)分的辣鸡选手用机高到不知道哪里去了。 Day1: 开场花了25min看了下题,T1有点怀疑复杂度,但又觉得是对的。T2 n只有200,直接n^3上就行...

zx2003的博客 1484

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

bzoj5317: [Jsoi2018]部落战争【凸包/Minkowski sum】

传送门 解题思路: 先求凸包。 合法向量相当于凸包A中存在一点经过该向量可到凸包B中。 即 A+v⃗&nbsp;=BA+v→=BA+\vec v=B ,那么v⃗&nbsp;=A−Bv→=A−B\vec v=A-B 画图发现,这些向量的轮廓就是凸包A绕取反后凸包B坐标平移一圈。 好像这个东西也叫Minkowski sum,即求{v⃗&nbsp;=a⃗&nbsp;+b⃗&nbsp;,a⃗&...

cdsszjj的博客 1715

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【BZOJ5317】【JSOI2018】部落战争

【题目链接】 点击打开链接 【思路要点】 询问点\(c=(x,y)\)的答案为1当且仅当\(c\in \{a+(-b)|a\in A,b\in B\}\)。 求解两个点集凸包的闵可夫斯基和,然后判断询问点是否在求得的凸包中即可。 时间复杂度\(O(NLogN)\)。 【代码】 #include&lt;bits/stdc++.h&gt; using namespace st...

cz_xuyixuan的博客 816

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

bzoj5317: [Jsoi2018]部落战争(凸包+Minkowski和)

传送门 题意:qqq次询问把一个凸包整体加一个向量(x,y)(x,y)(x,y)之后是否与另外一个凸包相交。 思路:转化一下发现只要会求A+B={v⃗=a⃗+b⃗∣a⃗∈A,b⃗∈B}A+B=\{\vec v=\vec a+\vec b|\vec a\in A,\vec b\in B\}A+B={v=a+b∣a∈A,b∈B}即可,这个要用到一个叫做MinkowskiMinkowskiMinkow...

苟为蒟蒻又何妨 392

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

害怕,可怜几何题 果然不会 题目就是说给你两个凸包,每次询问给你一个向量 \(c\) 问你能不能从两个凸包 \(A\) , \(B\) 里分别找到一个点 \(a\) , \(b\) 满足 \(a+c=b\) 。 考虑怎样的向量可以满足。 发现只有让B中的每一个点-A中的每一个点的集合中的向量可以满足。因为把上面的式子化一下就是 \(c=b-a\) 。 凸包B中的点集减去凸包A中的点集。这...

Aaronliu17008的博客 462

【BZOJ5315】【JSOI2018】防御网络

【题目链接】点击打开链接【思路要点】将边分为两种,一种是树上的边,一种是环上的边。树上的边有贡献,当且仅当其两侧均有点被选取,简单统计即可。环上的边有贡献,当且仅当其所在的环上相邻两个子树内被选取了一些点的点之间的区间不是环上最长的,同一个环上的边的贡献可以通过DP解决,时间复杂度\(O(N^3)\)。总时间复杂度\(O(N^3)\)。【代码】#include&lt;bits/stdc++.h&g...

cz_xuyixuan的博客 526

P4557 [JSOI2018]战争 闵科夫斯基和

题目 两个凸包A,B,沿某一方向向量移动B,问是否与A有交 两个图形A,B的闵可夫斯基和C={p0+p1|p0∈A,p1∈B} 两个凸包的闵科夫斯基和仍然是凸包 设p0∈A,p1∈B,方向向量V:满足b+V=a 则V=a-b=a+(-b) 则V是一个凸包,且是A,B的闵科夫斯基和 我们先求A,B的闵科夫斯基和C 判断每个向量是否在C中 #include<iostream> #inclu...

刷题记录 227

【JSOI 2018】潜入行动(树形动态规划)

题目链接 【JSOI2018】【Luogu4516】潜入行动 题目大意 求nnn个节点的树上大小为kkk的覆盖集个数。本题中一个被标记的点可以覆盖所有与之相邻的点,但是不能覆盖其本身。 n≤100000n≤100000n\le 100000,m≤100m≤100m\le 100 题解 dp[ver][cnt][0/1][0/1]dp[ver][cnt][0/1][0/1]dp[...

Galaxy Coder 的博客 679

bzoj5314: [Jsoi2018]潜入行动【树形dp】

Description 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有JSO Ier抵御外星人的进攻。在黄金舰队就位之前,JYY打算事先了解外星人的进攻计划。现在,携带了监听设备的特工 已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。外星人的母舰可以看成是一棵n个节点、n-1条边的 无向树,树上的节点用1,2…n编号。JYY的特...

cdsszjj的博客 1241

[JSOI2018]扫地机器人

题目大意 T为数据组数 解题思路 实际上是一道打表题(逃 手玩会发现有很多不合法的情况,而且看起来合法的方案,(i,j)和(i+1,j-1)是一样的。 我们不妨把方案打出来看看。先考虑n=m。 会发现确定了第一行之后,以后每一行都是上一行往前轮换一个,也就是第一个移动到最后,第i个到i-1的位置。 n!=m怎么办呢?设d=gcd(n,m),会发现如果你决策了d*d这个矩阵,然...

ZLTJohn的博客 1016

P4557 [JSOI2018]战争

首先可以题目描述的两个点集是两个凸包,分别设为A和B。 考虑一个向量w不合法的条件。 即存在b+w=a,其中a属于A,b属于B。 也就是a-b=w。 即对b取反后和a的闵可夫斯基和。 求出闵可夫斯基和后check点是否在凸包内即可,在凸包内说明不合法。 #include<iostream> #include<cctype> #include<cstdio> #i...

weixin_30711917的博客 177
上一篇: 【LuoguP4081】[SCOI2015]小凸想跑步
下一篇: 【LuoguP5328】[ZJOI2019]浙江省选
NeosKnight
博客等级 码龄9年 21粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值