半平面交 模板 bzoj2618 【Cqoi2006】凸多边形
来源:互联网 发布:mac flamingo 编辑:程序博客网 时间:2024/05/08 10:09
题目大意:
给两个凸多边形,求面积交。
题目分析:
求半平面交。
代码如下:
#include <cstdio>#include <algorithm>#include <cmath>using namespace std;struct point{ double x,y; point(){} point(double x,double y):x(x),y(y){} point operator + (const point &c) const { return point(x+c.x,y+c.y); } point operator - (const point &c) const { return point(x-c.x,y-c.y); } double operator * (const point &c) const { return x*c.y-y*c.x; } point operator * (const double &c) const { return point(x*c,y*c); }}b[1000];struct line{ point p,v; double alpha; bool operator < (const line &c) const{ return alpha<c.alpha; } line(){} line(point a,point b):p(a),v(b-a){ alpha=atan2(v.y,v.x); } point operator ^ (const line &c) const { point tmp=p-c.p; double rate=(c.v*tmp)/(v*c.v); return p+v*rate; }}a[1000000],p[1000000];int tot,m,n,l,r;bool onleft(point p,line l){ point tmp=p-l.p; return l.v*tmp>=0;}void half_plane_intersection(){ sort(a+1,a+1+tot); for(int i=1;i<=tot;i++) { while(r-l>=2 && !onleft(p[r-1]^p[r-2],a[i])) r--; if(r-l>=1 && fabs(p[r-1].v*a[i].v)<=0) p[r-1]=onleft(a[i].p,p[r-1])?a[i]:p[r-1]; else p[r++]=a[i]; } for(;;) { if(r-l>=2 && !onleft(p[r-1]^p[r-2],p[l])) r--; else if(r-l>=2 && !onleft(p[l]^p[l+1],p[r-1])) l++; else break; }}int main(){ scanf("%d",&m); tot=0; for(int j=1;j<=m;j++) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lf%lf",&b[i].x,&b[i].y); if(i!=1) a[++tot]=line(b[i-1],b[i]); } a[++tot]=line(b[n],b[1]); } half_plane_intersection(); if(r-l<=2) printf("0.000\n"); else { int sum=0; for(int i=l+1;i<r;i++) b[++sum]=p[i-1]^p[i]; b[++sum]=p[r-1]^p[l]; double ans=0; for(int i=2;i<=sum;i++) ans+=b[i-1]*b[i]; ans+=b[sum]*b[1]; printf("%.3lf\n",ans/2.0); } return 0;}
阅读全文
0 0
- 半平面交 模板 bzoj2618 【Cqoi2006】凸多边形
- [BZOJ2618][Cqoi2006]凸多边形(半平面交)
- bzoj2618 [Cqoi2006]凸多边形(半平面+S)
- bzoj2618 凸多边形 半平面交
- BZOJ2618 凸多边形 半平面交
- 【BZOJ2618】【Cqoi2006】凸多边形 半平面交 、算法的深度细节剖析。
- bzoj 2618: [Cqoi2006]凸多边形(半平面交模板)
- BZOJ 2618 CQOI2006 凸多边形 半平面交
- 【BZOJ 2618】[Cqoi2006]凸多边形 半平面交
- BZOJ 2618 [Cqoi2006]凸多边形 半平面交
- 【CQOI2006】【BZOJ2618】凸多边形
- bzoj2618【CQOI2006】凸多边形
- bzoj2618: [Cqoi2006]凸多边形
- BSOJ1156:CQOI2006 凸多边形 计算几何--半平面交
- bzoj 2618: [Cqoi2006]凸多边形 (半平面交)
- BZOJ 2618: [Cqoi2006]凸多边形(半平面交)
- [BZOJ2618]CQOI2006凸多边形|扫描线
- BZOJ2618 (半平面交)
- 微信小程序模板template的使用
- Storm Kafka + Storm + HBase实例
- c++成员变量的初始化顺序
- 算法题目-删除链表中重复的结点
- 《UNIX网络编程 卷1》 笔记: 基本UDP套接字编程
- 半平面交 模板 bzoj2618 【Cqoi2006】凸多边形
- LeetCode之路:404. Sum of Left Leaves
- Java 8 – 将 Stream 转换为 List
- HTML5之画布(canvas)(一)
- Kotlin笔记(一)——Hello Kotlin
- opencv中waitkey(0)的使用
- 1178: “顺”序列
- IDEA 导入java web项目后的相关配置
- Log4j的使用方法