BZOJ - 2618 凸多边形 (半平面交)
题意:求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 凸多边形 (半平面交)的更多相关文章
- bzoj 2618【半平面交模板】
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...
- bzoj 2618: [Cqoi2006]凸多边形 [半平面交]
2618: [Cqoi2006]凸多边形 半平面交 注意一开始多边形边界不要太大... #include <iostream> #include <cstdio> #inclu ...
- 洛谷 P4196 [CQOI2006]凸多边形 (半平面交)
题目链接:P4196 [CQOI2006]凸多边形 题意 给定 \(n\) 个凸多边形,求它们相交的面积. 思路 半平面交 半平面交的模板题. 代码 #include <bits/stdc++. ...
- 【BZOJ 2618】 2618: [Cqoi2006]凸多边形 (半平面交)
2618: [Cqoi2006]凸多边形 Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. Input 第一 ...
- bzoj 2618 2618: [Cqoi2006]凸多边形(半平面交)
2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 656 Solved: 340[Submit][Status] ...
- 2018.07.04 BZOJ 2618 Cqoi2006凸多边形(半平面交)
2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MB Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n ...
- bzoj 2618 半平面交模板+学习笔记
题目大意 给你n个凸多边形,求多边形的交的面积 分析 题意\(=\)给你一堆边,让你求半平面交的面积 做法 半平面交模板 1.定义半平面为向量的左侧 2.将所有向量的起点放到一个中心,以中心参照进行逆 ...
- 【BZOJ-2618】凸多边形 计算几何 + 半平面交 + 增量法 + 三角剖分
2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 959 Solved: 489[Submit][Status] ...
- 【BZOJ2618】[CQOI2006]凸多边形(半平面交)
[BZOJ2618][CQOI2006]凸多边形(半平面交) 题面 BZOJ 洛谷 题解 这个东西就是要求凸多边形的边所形成的半平面交. 那么就是一个半平面交模板题了. 这里写的是平方的做法. #in ...
随机推荐
- SpringMVC:学习笔记(5)——数据绑定及表单标签
SpringMVC——数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...
- json学习笔记--在JavaScript中的使用
1.字符串转换为JavaScript对象 var jsonStr = '[' + '{"name":"陶国荣","sex":"男& ...
- 收集整理的awk用法小结
awk 用法:awk ‘ pattern {action} ‘ 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...
- 0625 Django 基础
相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 python man ...
- Hyperledger Fabric1.0环境搭建
一.准备CentOS系统,本文使用的是CentOS7.0 二.安装Docker 执行命令 yum -y install docker 验证是否安装成功 docker --version 三.安装Doc ...
- tophat的用法
概述:tophat是以bowtie2为核心的一款比对软件. tophat工作分两步: 1.将reads用bowtie比对到参考基因组上. 2.将unmapped-reads打断成更小的fragment ...
- Java虚拟机的平台无关性与语言无关性
平台无关性 不同平台的不同java虚拟机,都执行同一种字节码文件,即Class文件 语言无关性 Java虚拟机不止能执行java程序,还有Clojure.Groovy.JRuby.Jython.Sca ...
- 20145240 《Java程序设计》第一次实验报告
20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...
- 高通平台MSM8916LCM模块移植(一)-bootloader部分【转】
本文转载自:http://www.mobile-open.com/2016/970947.html 高通平台中的bootloader叫做LK(Little Kernel,对于LCM来说LK部分相当重要 ...
- [Android]开源中国源码分析之二---DrawerLayout
从启动界面到主界面之后的效果如图所示,采用的是v4包下的DrawerLayout, activity_main.xml文件如下: <!-- A DrawerLayout is intended ...