题意:求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. offsetHeight+scrollHeight+clientHeight

    ch 窗口可见区域高度 :ch = padding + height(height不是所有内容的高度,是样式定义的高度) oh border以内的内容高度: oh = border + padding ...

  2. FTP下载

    import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import ja ...

  3. 【转载】格式化存储装置成为 Ext2/Ext3/Ext4 档案系统

    格式化 用系统管理员帐户 (即 root) 身份打「mkfs -t ext2|ext3|ext4 储存装置」: mkfs -t ext3 /dev/sdb5 要格式化档案系统为 Ext2,亦可以直接使 ...

  4. UCOS2_STM32F1移植详细过程

    源:UCOS2_STM32F1移植详细过程(三) UCOS2_STM32移植过程.系统内核.事件描述(汇总)

  5. 20145230《java程序设计》 第四次实验报告

    20145230实验4 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件 ...

  6. c++ 关键字extern(声明)和定义的区别

    extern  : extern  int  i; // declares but does not define i int i;         //declares and defines i ...

  7. JSP语法及内置对象

    JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]  是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动 ...

  8. Python根据内嵌的数字将字符串排序(sort by numbers embedded in strings)

    import re  re_digits = re.compile(r'(\d+)')  def embedded_numbers(s):       pieces = re_digits.split ...

  9. Mirantis OpenStack 7.0: NFVI Deployment Guide — NUMA/CPU pinning

    https://www.mirantis.com/blog/mirantis-openstack-7-0-nfvi-deployment-guide-numacpu-pinning/ Compute ...

  10. keystone cache

    http://docs.openstack.org/juno/config-reference/content/section_keystone.conf.html http://docs.opens ...