【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;
}
GEOSHIELD:分布式CPS的拜占庭容错与安全防护技术 分布式系统在关键基础设施(如轨道交通、智能电网)中面临网络延迟和恶意节点的双重挑战。拜占庭容错(BFT)技术通过算法保证系统在存在故障节点时仍能达成一致,是保障系统安全的核心机制。GEOSHIELD创新性地结合概率化网络延迟测量和TGS动态信任评分,实现了不依赖可信硬件的拜占庭 resilience。该技术通过建立节点行为的信用档案,动态识别恶意行为,在保证安全性的同时最大化系统可用性。实验证明,即使在自适应攻击策略下,GEOSHIELD仍能保持系统95.6%的正常运行时间,为CPS系统提供了可靠的安全防护 阅读详情

相关推荐

做蛋白组学数据分析,竟然还不会使用DIA-NN软件,走过路过不要错过,进来免费学习!!!

蛋白组学分析工具DIA-NN使用

wcy1995427的博客 9866

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

OpenClaw 快速安装与本地应用实战 —— 每一步都有截图加详细说明,本地AI助手,让打工人也有下属

《OpenClaw 2026开源智能体框架10分钟快速部署指南》摘要:本文提供OpenClaw最新版全平台部署方案,重点解决三大核心问题:1)环境配置优化,通过一键脚本实现3-8分钟快速安装(含国内镜像加速方案);2)初始化配置详解,包含大模型绑定(智普AI/本地模型)与5个高频技能安装;3)实战演示文件自动整理任务。同时总结6类常见故障解决方案,涵盖权限、端口占用等典型问题,确保用户从安装到首个自动化任务落地全程无障碍。特别强调Windows需管理员权限、禁用中文路径等关键注意事项,实现"安装即

weixin_43538316的博客 809

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

手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略

本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。

weixin_29008805的博客 449

SAP WMS开发实战:用BAPI_L_TO_CREATE_MULTIPLE搞定LT01转储单(附完整代码)

本文详细解析了SAP WMS开发中如何利用BAPI_L_TO_CREATE_MULTIPLE函数模块批量创建LT01转储单。文章深入剖析了核心参数、常见错误及实战代码框架,重点强调了源/目标存储类型等关键字段的获取方法,为系统集成与自动化流程开发提供了可靠的解决方案。

view3的博客 561

[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

YOLOv8改进 | 细节涨点篇 | DySample一种超级轻量的动态上采样算子(效果完爆CARAFE)

本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子)。

Snu77的博客 1万+

「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

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

RK3588芯片:ALSA音频通路下HDMI与耳机自动切换的技术探索

摘要:本文详细探讨了基于RK3588芯片的HDMI与耳机自动切换方案。文章首先剖析了ALSA音频架构的核心组件与工作原理,接着介绍了RK3588芯片的硬件特性及音频处理优势。重点阐述了自动切换的实现原理,包括硬件检测机制、ALSA驱动处理逻辑和软件控制流程,并提供了详细的配置步骤。同时针对常见问题如切换异常、音频质量下降等给出了解决方案。该方案通过合理配置设备树和ALSA文件,实现了音频输出的智能切换,提升了用户体验,展现了RK3588在音频处理领域的强大性能。未来随着AI音频技术的发展,该方案在智能家居、

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 266

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

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2087

JSOI2018R2游记

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

zx2003的博客 1484

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

Statistics and Machine Learning Toolbox

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

【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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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、付费专栏及课程。

余额充值