题意:求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. 常用mysql导入导出数据的命令

    To export 导出指定db_name的数据: $ mysqldump -u [uname] -p[pass] db_name > db_backup.sql 导出整个库的数据: $ mys ...

  2. 模版抽离 优化url

    抽离出base模板 复制index的代码到base里面,指定views里面跳转到base.html,删除掉会变化的保留通用的 把主要内容写写在block里面,写了三个block {% block le ...

  3. 软件工作考核项(zcl)——

    注意:这里没有对代码风格做要求,因为要代码走查! 考核项 考核标准 分数等级   需求规格说明书编写 主要用例图缺失 -1   主要软件界面设计图缺失 -1   主要功能清单项目缺失 -1   主要复 ...

  4. Funq之Lambda表达式2

    Last month I started a series of posts covering some of the new VB and C# language features that are ...

  5. WEB-INF有关的目录路径总结、转向方式: forward 重定向方式: Redirect

    WEB-INF有关的目录路径总结 1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提 ...

  6. HTML学习笔记(下)

    表格标签 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  7. 【HackerRank】Lonely Integer

    There are N integers in an array A. All but one integer occur in pairs. Your task is to find out the ...

  8. RTC是DS1339,驱动采用的是rtc-ds1307.c

    我的外部RTC是DS1339,驱动采用的是rtc-ds1307.c在内核里选上了 <*> I2C support 以及 [*]   Set system time from RTC on  ...

  9. Python编程-函数进阶二

    一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1) ...

  10. MongoDB 使用Limit和Skip完成分页 和游标(二)

    //$slice操作符返回文档中指定数组的内部值 //查询出Jim书架中第2~4本书 db.persons.find({name:"jim"},{books:{"$sli ...