BZOJ 5317: [Jsoi2018]部落战争
传送门
写出式子,若存在 $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]部落战争相关推荐
- BZOJ 2150: 部落战争 最大流
2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- bzoj 2150: 部落战争 (最小路径覆盖)
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 879 Solved: 493 [Submit][Status][Discus ...
- 部落战争手游源码( 服务端+客户端+资源+开发文档)
客户端:cocos2d-x C++开发 服务端:JAVA 数据库:Sql 下载地址:http://www.51xyyx.com/2733.html 下载地址:http://www.51xyyx.com ...
- 洛谷:P2172 [国家集训队]部落战争
题目链接: P2172 [国家集训队]部落战争 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 很明显的二分图:将原点与它能走到的点连一条边,然后做一遍最小点覆盖:即选出 ...
- 火柴人部落大乱斗html5游戏在线玩,火柴人部落战争
火柴人部落战争手游是一款最新的动作闯关休闲玩法手游,游戏中玩家可以自由操控火柴人开启大乱斗,在这里自由经营你的国度,收集武器装备,部落战争激情开战,对游戏感兴趣的话不妨点击下载尝试体验吧! 火柴人部落 ...
- bzoj2150 部落战争 二分图匹配
题目链接:戳这里 2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1141 Solved: 631 [Submit][Stat ...
- 51nod_2929 部落战争(DAG最小路径覆盖)
部落战争 Problem Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些 ...
- [bzoj2150] 部落战争 二分图
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 951 Solved: 533 [Submit][Status][Discuss] ...
- cocos2dx+java部落战争全套游戏源码资源策划文档
cocos2dx+java部落战争全套游戏源码资源策划文档,客户端cocos2dx 服务器java完整源码. 源码下载链接 cocos2dx+java部落战争全套游戏源码资源-cocos2D文档类资源 ...
最新文章
- 人工智能中常见的误区
- DG1062可编程信号源
- 抽象类,虚方法,接口
- Centos7.6安装redis
- JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用
- 荣耀平板7可以用鸿蒙么,荣耀平板7定档3月23日发布,一屏可同时开启4个应用
- 基坑监测日报模板_静兴项目部工程日报(2020/7/7)
- 微信小程序弹框滑动冒泡,外层页面也被滑动问题
- 数据结构:顺序表的基本操作
- 1. 测度论-概率空间的基本概念
- 论文阅读: [3d]Audio-driven Talking Face Video Generation with Learning-based Personalized Head Pose
- 打开catia界面全是白色怎么办_CATIA复合材料设计教程:1.软件安装
- 批量处理 | 起点和终点交叉配对进行路线查询
- 网站服务器发生故障,全国DNS服务器发生故障
- 【报告分享】 2021中国跨境电商发展报告-德勤(附下载)
- H3C QoS配置经典讲解
- JavaScript学习第十六天(键盘事件、表单事件、拖拽事件、框架事件、媒体事件)
- 微服务核心---服务的注册与发现,它们是什么?
- linux windows下oen***客户端的用法
- Unreal Engine 4 卡通着色(Cel Shading)教程
热门文章
- android 提醒app,安卓手机上提醒工作的软件有哪些?
- 2.4 定点除法运算
- 东方通中间件弱密码漏洞检测方法
- python美观代码_为什么Python 代码要写得美观而明确
- SQL 登录注入脚本_深圳嘉华学校之SQL 注入
- 损失与逃避心——使用技巧
- PageOffice在线打开office文件添加盖章没反应
- python3爬虫—实现简单获取贴吧信息
- 试用多片2K×8的RAM扩展为4K×16的RAM(下面用多片1K×4的RAM扩展为2K×8的RAM代替之, 二者原理相同)(二〇二〇年山东大学数字电路906综合题第1题)(全网第一手资料)
- 怎么在网页中播放视频之一:HTML5视频嵌入