题意:求n个凸多边形的交面积。

半平面交模板题。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const int N=+,inf=0x3f3f3f3f;
const db pi=acos(-),eps=1e-;
struct P {
db x,y;
P operator-(P b) {return {x-b.x,y-b.y};}
P operator+(P b) {return {x+b.x,y+b.y};}
P operator*(db b) {return {x*b,y*b};}
bool operator<(const P& b)const {return x!=b.x?x<b.x:y<b.y;}
bool operator==(const P& b)const {return x==b.x&&y==b.y;}
} p[N],hpi[N];
db cross(P a,P b) {return a.x*b.y-a.y*b.x;}
struct Line {
P p,v;
db rad()const {return atan2(v.y,v.x);};
} line[N],q[N];
bool onleft(P p,Line a) {return cross(a.v,p-a.p)>;}
P its(Line a,Line b) {
P v=a.p-b.p;
db t=cross(b.v,v)/cross(a.v,b.v);
return a.p+a.v*t;
}
bool operator<(const Line& a,const Line& b) {
db r1=a.rad(),r2=b.rad();
return fabs(r1-r2)>eps?r1<r2:onleft(a.p,b);
}
int n,m,nl,nhpi;
void HPI() {
sort(line,line+nl);
int hd=,tl=-;
for(int i=; i<nl; ++i) {
if(hd<=tl&&fabs(line[i].rad()-q[tl].rad())<eps)continue;
if(hd<tl&&cross(q[hd].v,q[tl].v)<&&onleft(its(q[hd],q[tl]),line[i]))continue;
for(; hd<tl&&!onleft(its(q[tl-],q[tl]),line[i]); --tl);
for(; hd<tl&&!onleft(its(q[hd],q[hd+]),line[i]); ++hd);
q[++tl]=line[i];
}
nhpi=;
for(int i=hd; i<tl; ++i)hpi[nhpi++]=its(q[i],q[i+]);
hpi[nhpi++]=its(q[tl],q[hd]);
}
db area() {
db ret=;
for(int i=; i<nhpi-; ++i)ret+=cross(hpi[i]-hpi[],hpi[i+]-hpi[]);
return fabs(ret/);
} int main() {
for(scanf("%d",&m); m--;) {
scanf("%d",&n);
for(int i=; i<n; ++i)scanf("%lf%lf",&p[i].x,&p[i].y);
for(int i=; i<n; ++i)line[nl++]= {p[i],p[(i+)%n]-p[i]};
}
HPI();
printf("%.3f\n",area());
return ;
}

BZOJ - 2618 凸多边形 (半平面交)的更多相关文章

  1. bzoj 2618【半平面交模板】

    #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...

  2. bzoj 2618: [Cqoi2006]凸多边形 [半平面交]

    2618: [Cqoi2006]凸多边形 半平面交 注意一开始多边形边界不要太大... #include <iostream> #include <cstdio> #inclu ...

  3. 洛谷 P4196 [CQOI2006]凸多边形 (半平面交)

    题目链接:P4196 [CQOI2006]凸多边形 题意 给定 \(n\) 个凸多边形,求它们相交的面积. 思路 半平面交 半平面交的模板题. 代码 #include <bits/stdc++. ...

  4. 【BZOJ 2618】 2618: [Cqoi2006]凸多边形 (半平面交)

    2618: [Cqoi2006]凸多边形 Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. Input 第一 ...

  5. bzoj 2618 2618: [Cqoi2006]凸多边形(半平面交)

    2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 656  Solved: 340[Submit][Status] ...

  6. 2018.07.04 BZOJ 2618 Cqoi2006凸多边形(半平面交)

    2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MB Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n ...

  7. bzoj 2618 半平面交模板+学习笔记

    题目大意 给你n个凸多边形,求多边形的交的面积 分析 题意\(=\)给你一堆边,让你求半平面交的面积 做法 半平面交模板 1.定义半平面为向量的左侧 2.将所有向量的起点放到一个中心,以中心参照进行逆 ...

  8. 【BZOJ-2618】凸多边形 计算几何 + 半平面交 + 增量法 + 三角剖分

    2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 959  Solved: 489[Submit][Status] ...

  9. 【BZOJ2618】[CQOI2006]凸多边形(半平面交)

    [BZOJ2618][CQOI2006]凸多边形(半平面交) 题面 BZOJ 洛谷 题解 这个东西就是要求凸多边形的边所形成的半平面交. 那么就是一个半平面交模板题了. 这里写的是平方的做法. #in ...

随机推荐

  1. 20160419 while练习,复习

    10 一.while和if题目练习 . 二.知识拓展 1. C#中的委托是什么?事件是不是一种委托? 答 :    委托可以把一个方法作为参数代入另一个方法.委托可以理解为指向一个函数的引用.     ...

  2. CSS素材+特效

    1.字体:https://www.zhihu.com/question/19680724 2.loading特效:http://www.cnblogs.com/lhb25/archive/2013/1 ...

  3. Bootstrap主题库

    主题 https://startbootstrap.com/template-categories/all/ https://bootstrapmade.com/ http://www.jqueryf ...

  4. Django 进阶篇之 Form验证

    Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ...

  5. Python自然语言处理 - 系列三

    有监督分类过程 ![enter image description here][1]例子:涉及一个特征器,给定一个姓名分析出是男性名字还是女性名字 分析:男性和女性的名字有一些鲜明的特点.以a,e 和 ...

  6. SOA 面向服务架构 阅读笔记(四)

    15  SOA管理 15.1 管理指的是实现一个制约和平衡的一致过程,以确保得到期望的结果. 15.2 管理被广泛应用于人工流程和软件流程中,一旦管理失败,后果会非常严重. 15.3 SOA管理的首要 ...

  7. mysql的一些密码错误问题,并从windows登录linux主机的mysql

    mysqld_safe --skip-grant-tables& mysql -u root mysql 可以修改密码: mysql>update mysql.user set auth ...

  8. SDWebImage第三方库学习

    1.基本使用方法 //异步下载并缓存 - (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT; //使用占位图片,当 ...

  9. 【转载】如何简单地理解Python中的if __name__ == '__main__'

    原帖:https://blog.csdn.net/yjk13703623757/article/details/77918633 通俗的理解__name__ == '__main__':假如你叫小明. ...

  10. eclipse 中英文切换

    第一种方法: 在Eclipse安装目录下找到它的配置文件"eclipse.ini",用UE或者EditPlus等工具打开该配置文件,截图显示如下: 然后在最后一行添加如下相应命令: ...