传送门

写出式子,若存在 $a \in A$,$b \in B$,使得 $b+v=a$,那么此方案会产生冲突

即存在 $a \in A$,$b \in B$,使得 $v=a+(-b)$,设 $C=A+(-B)$ 那么有 $v \in C$,$+$ 表示闵可夫斯基和,$-$ 表示坐标符号取反

所有直接求出 $A$ 和 $-B$ 的闵可夫斯基和的凸包,然后查询 $v$ 是否在凸包内即可

注意直接求闵可夫斯基和的凸包可能会有一些平行的向量,为了方便查询,重新做一遍凸包即可

我的做法会把凸包坐标变化,所以查询的向量也要跟着变化

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef double db;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=2e5+7;
struct poi {ll x,y;poi (ll a=0,ll b=0) { x=a,y=b; }inline poi operator + (const poi &tmp) const { return poi(x+tmp.x,y+tmp.y); }inline poi operator - (const poi &tmp) const { return poi(x-tmp.x,y-tmp.y); }inline bool operator < (const poi &tmp) const { return x!=tmp.x ? x<tmp.x : y<tmp.y; }
}A[N],B[N],C[N],st[N],sum;
inline ll Cross(poi A,poi B) { return A.x*B.y-A.y*B.x; }
inline db Dot(poi A,poi B) { return A.x*B.x+A.y*B.y; }
inline db Len(poi A) { return sqrt(Dot(A,A)); }
inline bool cmp(const poi &A,const poi &B) { return Cross(A,B)>0||(Cross(A,B)==0&&Len(A)<Len(B)); }
void Tubao(poi *P,int &tot)
{sort(P+1,P+tot+1); sum=sum+P[1];/*如果此时求的是C的凸包P[1]=(0,0)没有贡献*/ for(int i=tot;i>=1;i--) P[i]=P[i]-P[1];sort(P+1,P+tot+1,cmp); int Top=0;for(int i=1;i<=tot;st[++Top]=P[i],i++)while(Top>1 && Cross(P[i]-st[Top-1],st[Top]-st[Top-1])>=0 ) Top--;tot=Top; for(int i=1;i<=tot;i++) P[i]=st[i];
}
int check(poi *P,int tot,poi A)
{A=A-sum;if(Cross(A,P[2])>0||Cross(P[tot],A)>0) return 0;int pos=lower_bound(P+1,P+tot+1,A,cmp)-P-1; if(pos==tot) return 0;return Cross(A-P[pos],P[pos+1]-P[pos])<=0;
}
int n,m,T,Q;
int main()
{n=read(),m=read(),Q=read();for(int i=1;i<=n;i++) A[i].x=read(),A[i].y=read();for(int i=1;i<=m;i++) B[i].x=-read(),B[i].y=-read();Tubao(A,n); Tubao(B,m);int la=1,lb=1; C[++T]=A[1]+B[1];while(la<=n||lb<=m){poi p1=A[la%n+1]+B[(lb-1)%m+1],p2=A[(la-1)%n+1]+B[lb%m+1];if(Cross(p1-C[T],p2-C[T])>=0) la++,C[++T]=p1;else lb++,C[++T]=p2;}Tubao(C,T);for(int i=1;i<=Q;i++){int x=read(),y=read();printf("%d\n",check(C,T,poi(x,y)));}return 0;
}

转载于:https://www.cnblogs.com/LLTYYC/p/11444577.html

BZOJ 5317: [Jsoi2018]部落战争相关推荐

  1. BZOJ 2150: 部落战争 最大流

    2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  2. bzoj 2150: 部落战争 (最小路径覆盖)

    2150: 部落战争 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 879  Solved: 493 [Submit][Status][Discus ...

  3. 部落战争手游源码( 服务端+客户端+资源+开发文档)

    客户端:cocos2d-x C++开发 服务端:JAVA 数据库:Sql 下载地址:http://www.51xyyx.com/2733.html 下载地址:http://www.51xyyx.com ...

  4. 洛谷:P2172 [国家集训队]部落战争

    题目链接: P2172 [国家集训队]部落战争 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 很明显的二分图:将原点与它能走到的点连一条边,然后做一遍最小点覆盖:即选出 ...

  5. 火柴人部落大乱斗html5游戏在线玩,火柴人部落战争

    火柴人部落战争手游是一款最新的动作闯关休闲玩法手游,游戏中玩家可以自由操控火柴人开启大乱斗,在这里自由经营你的国度,收集武器装备,部落战争激情开战,对游戏感兴趣的话不妨点击下载尝试体验吧! 火柴人部落 ...

  6. bzoj2150 部落战争 二分图匹配

    题目链接:戳这里 2150: 部落战争 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1141  Solved: 631 [Submit][Stat ...

  7. 51nod_2929 部落战争(DAG最小路径覆盖)

    部落战争 Problem Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些 ...

  8. [bzoj2150] 部落战争 二分图

    2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 951 Solved: 533 [Submit][Status][Discuss] ...

  9. cocos2dx+java部落战争全套游戏源码资源策划文档

    cocos2dx+java部落战争全套游戏源码资源策划文档,客户端cocos2dx 服务器java完整源码. 源码下载链接 cocos2dx+java部落战争全套游戏源码资源-cocos2D文档类资源 ...

最新文章

  1. 人工智能中常见的误区
  2. DG1062可编程信号源
  3. 抽象类,虚方法,接口
  4. Centos7.6安装redis
  5. JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用
  6. 荣耀平板7可以用鸿蒙么,荣耀平板7定档3月23日发布,一屏可同时开启4个应用
  7. 基坑监测日报模板_静兴项目部工程日报(2020/7/7)
  8. 微信小程序弹框滑动冒泡,外层页面也被滑动问题
  9. 数据结构:顺序表的基本操作
  10. 1. 测度论-概率空间的基本概念
  11. 论文阅读: [3d]Audio-driven Talking Face Video Generation with Learning-based Personalized Head Pose
  12. 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
  13. 批量处理 | 起点和终点交叉配对进行路线查询
  14. 网站服务器发生故障,全国DNS服务器发生故障
  15. 【报告分享】 2021中国跨境电商发展报告-德勤(附下载)
  16. H3C QoS配置经典讲解
  17. JavaScript学习第十六天(键盘事件、表单事件、拖拽事件、框架事件、媒体事件)
  18. 微服务核心---服务的注册与发现,它们是什么?
  19. linux windows下oen***客户端的用法
  20. Unreal Engine 4 卡通着色(Cel Shading)教程

热门文章

  1. android 提醒app,安卓手机上提醒工作的软件有哪些?
  2. 2.4 定点除法运算
  3. 东方通中间件弱密码漏洞检测方法
  4. python美观代码_为什么Python 代码要写得美观而明确
  5. SQL 登录注入脚本_深圳嘉华学校之SQL 注入
  6. 损失与逃避心——使用技巧
  7. PageOffice在线打开office文件添加盖章没反应
  8. python3爬虫—实现简单获取贴吧信息
  9. 试用多片2K×8的RAM扩展为4K×16的RAM(下面用多片1K×4的RAM扩展为2K×8的RAM代替之, 二者原理相同)(二〇二〇年山东大学数字电路906综合题第1题)(全网第一手资料)
  10. 怎么在网页中播放视频之一:HTML5视频嵌入