题目描述

  对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积。
  对于两个点集A和B,定义集合的和为:
  A+B={(xiA+xjB,yiA+yjB ):(xiA,yiA )∈A,(xjB,yjB )∈B}
  现在给定一个N个点的集合A和一个M个点的集合B,求2F(A+B)。

输入格式

 第一行包含用空格隔开的两个整数,分别为N和M;
  第二行包含N个不同的数对,表示A集合中的N个点的坐标;
  第三行包含M个不同的数对,表示B集合中的M个点的坐标。

 

输出格式

 一共输出一行一个整数,2F(A+B)。


数据规模和约定
  对于30%的数据满足N ≤ 200,M ≤ 200;
  对于100%的数据满足N ≤ 10^5,M ≤ 10^5,|xi|, |yi| ≤ 10^8。

  • 题解:

    • 如果一个点成为了和$A+B$的凸包,那么一定同时在$A$和$B$的凸包上;
    • 设$A+B$看成把凸包$A$平移后放在凸包$B$上,发现在两个凸包上组合成新的凸包的点对是单调的;
    • 类似$graham$维护两个指针;
    • 不太好说,附图,但是建议自己$YY$:
    •  #include<bits/stdc++.h>
      #define ll long long
      using namespace std;
      const int N=;
      int n,m,cnt1,cnt2,Cnt;
      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<<)+(x<<)+c-'';c=gc();}
      return x*f;
      }
      struct poi{
      int x,y;
      poi(int _x=,int _y=):x(_x),y(_y){};
      poi operator +(const poi&A)const{return poi(x+A.x,y+A.y);}
      poi operator -(const poi&A)const{return poi(x-A.x,y-A.y);}
      bool operator <(const poi&A)const{return x==A.x?y<A.y:x<A.x;}
      }p1[N],p2[N],q1[N],q2[N],Q[N];
      ll crs(poi A,poi B){return (ll)A.x*B.y-(ll)A.y*B.x;}
      void convex(poi *p,poi *q,int&tot,int&cnt){
      if(tot==){q[cnt=]=q[]=p[];return;}
      sort(p+,p+tot+);
      q[cnt=]=p[];
      for(int i=;i<=tot;i++){
      while(cnt> && crs(q[cnt]-q[cnt-],p[i]-q[cnt])<=)cnt--;
      q[++cnt]=p[i];
      }
      int now=cnt;
      for(int i=tot-;i;i--){
      while(cnt>now && crs(q[cnt]-q[cnt-],p[i]-q[cnt])<=)cnt--;
      q[++cnt]=p[i];
      }
      cnt--;
      }
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("bzoj2564.in","r",stdin);
      freopen("bzoj2564.out","w",stdout);
      #endif
      n=rd();m=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,q1,n,cnt1);
      convex(p2,q2,m,cnt2);
      int i,j;
      for(i=,j=;i<=cnt1;i++){
      Q[++Cnt]=q1[i]+q2[j];
      while(j<=cnt2&&crs(q2[j+]-q2[j],q1[i+]-q1[i])>){
      Q[++Cnt]=q1[i]+q2[++j];
      }
      }
      for(;j<=cnt2+;j++)Q[++Cnt]=q1[i]+q2[j];
      Cnt--;
      ll ans=;
      for(i=;i<Cnt;i++)ans += crs(Q[i]-Q[],Q[i+]-Q[]);
      printf("%lld\n",ans);
      return ;
      }

      bzoj2564

bzoj2564集合的面积的更多相关文章

  1. bzoj2564 集合的面积

    Description 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ...

  2. bzoj2564: 集合的面积(闵可夫斯基和 凸包)

    题面 传送门 题解 花了一个下午的时间调出了一个稍微能看的板子--没办法网上的板子和咱的不太兼容-- 首先有一个叫做闵可夫斯基和的东西,就是给你两个点集\(A,B\),要你求一个点集\(C=\{x+y ...

  3. BZOJ2564: 集合的面积(闵可夫斯基和 凸包)

    题意 题目链接 Sol 这个东西的学名应该叫"闵可夫斯基和".就是合并两个凸包 首先我们先分别求出给出的两个多边形的凸包.合并的时候直接拿个双指针扫一下,每次选最凸的点就行了. 复 ...

  4. bzoj 2564 集合的面积

    Description 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. UVALive 4794 Sharing Chocolate

    Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...

  7. [opencv]二维码识别开发流程及问题复盘总结

    项目复盘总结 开发需求: 在桌面机器人(向下俯视)摄像头拍摄到的图像中做条形码识别与二维码识别. 条形码在图像固定位置,二维码做成卡片的形式在固定区域内随意摆放. 开发环境及相关库:ubuntu 18 ...

  8. 计算照片的面积(WPF篇)

    昨天,老周突发其想地给大伙伴们说了一下UWP应用中计算照片面积的玩法,而且老周也表示会提供WPF版本的示例.所以,今天就给大伙们补上吧. WPF是集成在.net框架中,属于.net的一部分,千万不要跟 ...

  9. 计算照片的面积(UWP篇)

    今天先说UWP应用程序上计算照片面积的方法,改天有空,再说说WPF篇. 其实计算照片面积的原理真TMD简单,只要你有本事读到照片的像素高度和宽度,以及水平/垂直方向上的分辨率(DPI)就可以了.计算方 ...

随机推荐

  1. ofo容器pass架构分享

    一.我们先要了解一下,为什么企业需要一个paas平台?或者可以说paas到底能做什么? 1.1 我们先来了解一下paas到底是什么? PaaS是Platform-as-a-Service的缩写,意思是 ...

  2. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

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

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

  4. Python 标准库中的装饰器

    题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...

  5. MVC 漫长之路(一)

    1.新建项目 mvc  视图引擎选中 Razor   2.允许我们设置这个项目关于 MVC 的一些设置,确认选中了“空”项目模板   3.   4.打开 Global.asax 文件 配置路由名称等 ...

  6. Visual Studio win平台 AI环境搭建

    内容提要:我觉得难点主要出在下载上,程序跑的都挺流畅的.下载有时会失败. 1.下载安装git.这一步主要为了下载示例和自动安装环境的python代码,直接去github上用网页下载也是一样的,git不 ...

  7. TeamWork#3,Week5,Scrum Meeting 11.13

    最近我们根据之前发现的问题, 补充了相关知识,正在努力修复出现的问题,调整程序结构. 成员 已完成 待完成 彭林江 之前没有考虑到网站信息更新导致的程序可变性,正在调整爬虫程序结构 更换爬虫结构 郝倩 ...

  8. Task 4.3 求环形数组的最大子数组和

    任务要求:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n- ...

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

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

  10. “吃神么,买神么”的第一个Sprint计划(第七天)

    “吃神么,买神么”项目Sprint计划 ——5.25  星期一(第五天)立会内容与进度 摘要: 所有的部件都完成,在贴每个人负责的部件时发现很多问题,很多网页布局的运用不熟练,一部分的div会跑位置~ ...