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)就可以了.计算方 ...
随机推荐
- gridview导出数据,如果为0开头,丢失0解决方案
1.protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e ) { if (e.Row.Row ...
- ASM Disk Discovery 最佳实践
ASM DISK 的Discovery PATH ASM实例的ASM_DISKSTRING初始化参数使用一个逗号分割的字符串限制ASM实例发现的DISK可以用于ASM DISK, 该字符串支持通配符如 ...
- include方便查找
#include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#inc ...
- Python静态方法实现单实例模式
单实例模式 当程序中需要同一个实例就可以解决问题的场景,可以使用单实例模式
- 初学Linux(一)关闭操作shutdown halt reboot
1.shutdown –h 10 #这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中. 2.Shutdown –h now #立马关机 3.Shutdown –h 11:1 ...
- PHP解决网站大数据大流量与高并发
1:硬件方面 普通的一个p4的服务器每天最多能支持10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力软件怎么优化都是于事无补的.主要影响服务器的速度 有:网络-硬盘读写 ...
- [T-ARA][Bye Bye]
歌词来源:http://music.163.com/#/song?id=22704472 사랑하는 그대 Bye Bye, Bye Bye, Bye Bye, [sa-lang-ha-neun geu ...
- rabbitmq的万能安装和外网访问(NC版)
先去这个http://www.rabbitmq.com/releases/下载erlang环境和rpm(erlang的尽量高点,rabbitmq版本差不多就可以了,) erlang-19.0.4-1. ...
- Guava包学习--Hash
我们HashMap会有一个rehash的过程,为什么呢?因为java内建的散列码被限制为32位,而且没有分离散列算法和所作用的数据,所以替代算法比较难做.我们使用HashMap的时候它自身有一个reh ...
- 【[NOI2015]品酒大会】
可能是最傻的做法了 暴力单调栈+\(st\)表 首先看到这道题就基本知道这是个\(SA\)了,先无脑敲上\(SA\)和求\(height\)的板子 之后尝试搞一下第一问 发现第一问就是求出满足\(lc ...