• 题解:

    • 求出$A$ 和$-B$ 的$Minkowsiki$和再$O(logn)$判断一个点是否在凸包内;
    • $Minkowsiki$的求法比较容易忘,要多多温习才可以;
  •  #include<bits/stdc++.h>
    #define ld long long
    using namespace std;
    const int N=;
    int n,m,q;
    struct P{
    ld x,y;
    P(ld _x=,ld _y=):x(_x),y(_y){};
    bool operator <(const P&a)const{return x==a.x?y<a.y:x<a.x;}
    P operator -(const P&a)const{return P(x-a.x,y-a.y);}
    P operator +(const P&a)const{return P(x+a.x,y+a.y);}
    }p1[N],p2[N],ch[N],p[N<<],Q;
    ld crs(P a,P b){return a.x*b.y-a.y*b.x;}
    ld len(P a){return a.x*a.x+a.y*a.y;}
    bool cmpQ(P a,P b){return crs(a,b)>||(crs(a,b)==&&len(a)<len(b));}
    char gc(){
    static char*P1,*P2,s[];
    if(P1==P2)P2=(P1=s)+fread(s,,,stdin);
    return(P1==P2)?EOF:*P1++;
    }
    int rd(){
    int x=,f=;char c=gc();
    while(c<''||c>''){if(c=='-')f=-;c=gc();}
    while(c>=''&&c<=''){x=x*+c-'';c=gc();}
    return x*f;
    }
    void convex(P *p,int&cnt){
    sort(p+,p+cnt+);
    int top,tmp;
    ch[top=]=p[];
    for(int i=;i<=cnt;++i){
    while(top>&&crs(ch[top]-ch[top-],p[i]-ch[top])<=)top--;
    ch[++top]=p[i];
    }
    tmp=top;
    for(int i=cnt-;i;--i){
    while(top>tmp&&crs(ch[top]-ch[top-],p[i]-ch[top])<=)top--;
    ch[++top]=p[i];
    }
    for(int i=;i<=top;++i)p[i]=ch[i];
    cnt=--top;
    }
    bool check(P Q){
    if(crs(p[],Q)<||crs(p[n],Q)>)return false;
    int pos=lower_bound(p+,p+n+,Q,cmpQ)-p-;
    return crs(p[pos+]-p[pos],Q-p[pos])>=;
    }
    int main(){
    #ifndef ONLINE_JUDGE
    freopen("war.in","r",stdin);
    freopen("war.out","w",stdout);
    #endif
    n=rd();m=rd();q=rd();
    for(int i=;i<=n;++i)p1[i].x=rd(),p1[i].y=rd();
    for(int i=;i<=m;++i)p2[i].x=-rd(),p2[i].y=-rd();
    convex(p1,n),convex(p2,m);
    int cnt=,j=;
    p1[n+]=p1[];p2[m+]=p2[];
    for(int i=;i<=n;++i){
    p[++cnt]=p1[i]+p2[j];
    while(j<=m&&crs(p2[j+]-p2[j],p1[i+]-p1[i])>=)
    p[++cnt]=p1[i]+p2[++j];
    }
    while(j<=m)p[++cnt]=p1[]+p2[j++];
    n=cnt;for(int i=;i<=n;++i)p[i]=p[i]-p[];
    for(int i=;i<=q;++i){
    Q.x=rd(),Q.y=rd();
    printf("%d\n",check(Q-p[]));
    }
    return ;
    }

LGP4577【JSOI2018】战争的更多相关文章

  1. [JSOI2018]战争

    题目描述 九条可怜是一个热爱读书的女孩子. 在她最近正在读的一本小说中,描述了两个敌对部落之间的故事.第一个部落有 nnn 个人,第二个部落有 mmm 个人,每一个人的位置可以抽象成二维平面上坐标为 ...

  2. P4557 [JSOI2018]战争

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

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

    令 \(a\in A,b\in B\) 则移动向量 \(\omega\) 使得存在 \(b+\omega=a\) 那么 \(\omega\) 需要满足 \(\omega=a−b\) 黑科技:闵可夫斯基 ...

  4. 洛谷P4557 [JSOI2018]战争(闵可夫斯基和+凸包)

    题面 传送门 题解 看出这是个闵可夫斯基和了然而我当初因为见到这词汇是在\(shadowice\)巨巨的\(Ynoi\)题解里所以压根没敢学-- 首先您需要知道这个 首先如果有一个向量\(w\)使得\ ...

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

    害怕,可怜几何题 果然不会 题目就是说给你两个凸包,每次询问给你一个向量 \(c\) 问你能不能从两个凸包 \(A\) , \(B\) 里分别找到一个点 \(a\) , \(b\) 满足 \(a+c= ...

  6. 【LuoguP4557】[JSOI2018]战争

    题目链接 题意 给你两个点集. q次询问 , 每次把其中一个点集往一个方向移动 , 问两个点集的凸包还有没有交. Sol 闵可夫斯基和板子题. 把问题做如下转换: 我们本来两个凸包相交是相当于是对于移 ...

  7. 计算几何细节梳理&模板

    点击%XZY巨佬 向量的板子 #include<bits/stdc++.h> #define I inline using namespace std; typedef double DB ...

  8. HHHOJ #151. 「NOI模拟 #2」Nagisa

    计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...

  9. 【学习笔记】Minkowski和

    这还是个被我咕了N久的玩意 Minkowski和是一个奇怪的玩意 他长这样 $S={a+b \| a \in A , b \in B}$ AB可以是点集也可是向量集(显然) 他可以处理一些奇怪的东西 ...

  10. JSOI部分题解

    JSOI部分题解 JSOI2018 战争 问题转化为给定你两个凸包\(\mathbb S,\mathbb T\),每次独立的询问将\(\mathbb T\)中的每个点移动一个向量,问\(\mathbb ...

随机推荐

  1. 机器学习基础 --- pandas的基本使用

    一.pandas的简介 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些 ...

  2. ossec安装

    安装 安装要求 对于Unix系统来说,OSSEC只需要GNU的make.gcc和libc.推荐使用OpenSSL,但仅属于一个可选项.而且,通常您只需在一个系统上做编译操作,然后将二进制程序复制到其他 ...

  3. halt命令详解

    基础命令学习目录首页 原文链接:https://www.jb51.net/LINUXjishu/57947.html 名称:halt 使用权限:系统管理者 halt 使用方式:halt [-n] [- ...

  4. 对于新手来说,Python 中有哪些难以理解的概念?

    老手都是从新手一路过来的,提起Python中难以理解的概念,可能很多人对于Python变量赋值的机制有些疑惑,不过对于习惯于求根究底的程序员,只有深入理解了某个事物本质,掌握了它的客观规律,才能得心应 ...

  5. caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: 没有那个文件或目录

    You need to generate caffe.pb.h manually using protoc as follows. # In the directory you installed C ...

  6. Daily Scrumming* 2015.10.24(Day 5)

    一.总体情况总结 从今天开始,我们开始正式进入紧锣密鼓的集中开发周啦~~加油Fighting~ 开会讨论了一下各个人的细致分工,前端后端各自想成员分派任务. 继续各自领域的准备工作,同时开始进行开发. ...

  7. [BUAA OO]第四次博客作业

      一.      测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...

  8. 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码

    20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...

  9. bug--注意Android编译打包--找不到某某类

    http://blog.csdn.net/mad1989/article/details/9142557 看到这篇 才解决问题= = 15,ClassNotFoundException: Didn't ...

  10. 防止DDoS攻击,每5分钟监控本机的web服务,将目前已经建立连接的IP计算出来,且实现top5。再此基础上,将并发连接超过50的IP禁止访问web服务

    netstat -lntupa | grep ":80" | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' ...