bzoj2564 集合的面积
Description
对于两个点集A和B,定义集合的和为:
A+B={(xiA+xjB,yiA+yjB ):(xiA,yiA )∈A,(xjB,yjB )∈B}
现在给定一个N个点的集合A和一个M个点的集合B,求2F(A+B)。
Input
第一行包含用空格隔开的两个整数,分别为N和M;
第二行包含N个不同的数对,表示A集合中的N个点的坐标;
第三行包含M个不同的数对,表示B集合中的M个点的坐标。
Output
一共输出一行一个整数,2F(A+B)。
Sample Input
0 0 2 1 0 1 2 0
0 0 1 0 0 2 1 2 0 1
Sample Output
数据规模和约定
对于30%的数据满足N ≤ 200,M ≤ 200;
对于100%的数据满足N ≤ 10^5,M ≤ 10^5,|xi|, |yi| ≤ 10^8。
正解:$Minkowski$和。
$Minkowski$和,就是题面的这个东西。。
分别求出两个点集的凸包,然后贪心地加点就行。
首先,$A$凸包和$B$凸包的第一个点的和肯定会在最终的凸包里。
然后我们设$A$凸包到了$i$点,$B$凸包到了$j$点。
如果$a[i+1]+b[j]$比$a[i]+b[j+1]$更凸,那么就用$A$凸包更新,否则用$B$凸包更新。
最后求出的这个就是新凸包,直接用叉积算面积就行了。
#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define N (500010) using namespace std; struct point{
ll x,y;
il point operator + (const point &a) const{
return (point){x+a.x,y+a.y};
}
il point operator - (const point &a) const{
return (point){x-a.x,y-a.y};
}
}p[N],t1[N],t2[N],st[N]; int n,m,top;
ll S; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il int cmp(const point &a,const point &b){
if (a.x==b.x) return a.y<b.y; return a.x<b.x;
} il ll cross(RG point a,RG point b){ return a.x*b.y-a.y*b.x; } il void graham(point *p,point *t,RG int n){
sort(p+,p+n+,cmp);
for (RG int i=;i<=n;++i){
while (top>= && cross(p[i]-t[top-],t[top]-t[top-])>=) --top;
t[++top]=p[i];
}
for (RG int i=n-,la=top;i>=;--i){
while (top>la && cross(p[i]-t[top-],t[top]-t[top-])>=) --top;
t[++top]=p[i];
}
--top; return;
} int main(){
#ifndef ONLINE_JUDGE
freopen("area.in","r",stdin);
freopen("area.out","w",stdout);
#endif
n=gi(),m=gi();
for (RG int i=;i<=n;++i) p[i].x=gi(),p[i].y=gi(); graham(p,t1,n),n=top,top=;
for (RG int i=;i<=m;++i) p[i].x=gi(),p[i].y=gi(); graham(p,t2,m),m=top,top=;
st[top=]=t1[]+t2[];
for (RG int i=,j=;i<=n || j<=m;){
RG point x=t1[(i-)%n+]+t2[j%m+],y=t1[i%n+]+t2[(j-)%m+];
if (cross(x-st[top],y-st[top])>=) st[++top]=x,++j; else st[++top]=y,++i;
}
for (RG int i=;i<top;++i) S+=cross(st[i]-st[],st[i+]-st[]); cout<<S; return ;
}
bzoj2564 集合的面积的更多相关文章
- bzoj2564集合的面积
题目描述 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ):(xiA ...
- bzoj2564: 集合的面积(闵可夫斯基和 凸包)
题面 传送门 题解 花了一个下午的时间调出了一个稍微能看的板子--没办法网上的板子和咱的不太兼容-- 首先有一个叫做闵可夫斯基和的东西,就是给你两个点集\(A,B\),要你求一个点集\(C=\{x+y ...
- BZOJ2564: 集合的面积(闵可夫斯基和 凸包)
题意 题目链接 Sol 这个东西的学名应该叫"闵可夫斯基和".就是合并两个凸包 首先我们先分别求出给出的两个多边形的凸包.合并的时候直接拿个双指针扫一下,每次选最凸的点就行了. 复 ...
- bzoj 2564 集合的面积
Description 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- UVALive 4794 Sharing Chocolate
Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...
- [opencv]二维码识别开发流程及问题复盘总结
项目复盘总结 开发需求: 在桌面机器人(向下俯视)摄像头拍摄到的图像中做条形码识别与二维码识别. 条形码在图像固定位置,二维码做成卡片的形式在固定区域内随意摆放. 开发环境及相关库:ubuntu 18 ...
- 计算照片的面积(WPF篇)
昨天,老周突发其想地给大伙伴们说了一下UWP应用中计算照片面积的玩法,而且老周也表示会提供WPF版本的示例.所以,今天就给大伙们补上吧. WPF是集成在.net框架中,属于.net的一部分,千万不要跟 ...
- 计算照片的面积(UWP篇)
今天先说UWP应用程序上计算照片面积的方法,改天有空,再说说WPF篇. 其实计算照片面积的原理真TMD简单,只要你有本事读到照片的像素高度和宽度,以及水平/垂直方向上的分辨率(DPI)就可以了.计算方 ...
随机推荐
- Linux 加载卷组
root 用户下执行: vgchange -ay vgdatamount /u01 vgdisplay 查看卷组
- Python项目生成requirements.txt的多种方式
我相信任何软件程序都会有依赖的类库,尤其现在开源如此的火爆,因为一个项目可能会有无很多的依赖的包 这个时候难道我们都要一个一个的去找到安装吗?即使你找到了依赖的包 但是呢模块的版本又有很多难道你都要装 ...
- [UI] 精美UI界面欣赏[7]
精美UI界面欣赏[7] 视频地址: http://v.youku.com/v_show/id_XOTM0MDUzNTg0.html UI介绍地址: http://www.zhihu.com/quest ...
- linux rz上传文件及出错解决方案
在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...
- 设计模式之——单例模式(Singleton)的常见应用场景(转):
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...
- 【3】python中如何生成随机数的几个例子
#__author:"吉勇佳" #date: 2018/10/14 0014 #function: import math import random # 向上取整 print(m ...
- JavaScript 空位补零实现代码
实现一: 复制代码代码如下: /* 平淡无奇法 */ function pad(num, n) { var i = (num + "").length; while(i++ < ...
- JFinal 部署在 Tomcat 下推荐方法(转载)
经常有人在群里问 tomcat 下项目部署的问题,现写个简单的博文,希望能帮助到有需要的人. 首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目 ...
- PAT乙级1009
1009 说反话 (20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干 ...
- HDU2546(01背包加一点点变形)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others) Me ...