bzoj2618: [Cqoi2006]凸多边形
来源:互联网 发布:mysql修改root密码 编辑:程序博客网 时间:2024/05/20 02:55
简述
半平面交裸题
一开始因为一个很粗心的问题
就是
代码
//半平面交#include <cstdio>#include <algorithm>#include <cmath>#define maxn 500#define eps 1e-8using namespace std;int N, tot;struct point{ double x, y; point(double x, double y):x(x),y(y){} point(){}}pt[maxn], _;struct vec{ point pt; double x, y, th; vec(point pt, double x, double y):pt(pt),x(x),y(y){} vec(){};}seg[maxn], q[maxn];point operator+(point pt, vec v){return point(pt.x+v.x,pt.y+v.y);}vec operator-(point p1, point p2){return vec(p2,p1.x-p2.x,p1.y-p2.y);}vec operator+(vec v1, vec v2){return vec(_,v1.x+v2.x,v1.y+v2.y);}vec operator-(vec v1, vec v2){return vec(_,v1.x-v2.x,v1.y-v2.y);}double operator*(vec v1, vec v2){return v1.x*v2.y-v2.x*v1.y;}vec operator*(vec v, double t){return vec(_,v.x*t,v.y*t);}bool in(point p, vec v){return (p-v.pt)*v<-eps;}bool operator<(const vec &v1, const vec &v2){return fabs(v1.th-v2.th)<eps?in(v1.pt,v2):v1.th<v2.th;}point inter(vec v1, vec v2){ vec u=v1.pt-v2.pt; double t=v2*u/(v1*v2); return v1.pt+v1*t;}void init(){ int x[100], y[100], i, j, n, m; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&m); for(j=0;j<m;j++)scanf("%d%d",x+j,y+j); for(j=0;j<m;j++)seg[++tot]=point(x[(j+1)%m],y[(j+1)%m])-point(x[j],y[j]); }}void hpi(){ int l, r, i, x; for(i=1;i<=tot;i++)seg[i].th=atan2(seg[i].y,seg[i].x); sort(seg+1,seg+tot+1); for(x=1,i=2;i<=tot;i++)if(fabs(seg[i].th-seg[i-1].th)>eps)seg[++x]=seg[i];tot=x; for(q[l=r=1]=seg[1],i=2;i<=tot;i++) { while(l<r and !in(inter(q[r],q[r-1]),seg[i]))r--; while(l<r and !in(inter(q[l],q[l+1]),seg[i]))l++; q[++r]=seg[i]; } while(l<r and !in(inter(q[r],q[r-1]),q[l]))r--; while(l<r and !in(inter(q[l],q[l+1]),q[r]))l++; pt[tot=1]=inter(q[r],q[l]); for(i=l;i<r;i++)pt[++tot]=inter(q[i],q[i+1]);}void calc(){ double S=0.0; int i; for(i=3;i<=tot;i++)S+=(pt[i]-pt[1])*(pt[i-1]-pt[1]); printf("%.3lf",fabs(S)/2);}int main(){ init(); hpi(); calc(); return 0;}
0 0
- 【CQOI2006】【BZOJ2618】凸多边形
- bzoj2618【CQOI2006】凸多边形
- bzoj2618: [Cqoi2006]凸多边形
- [BZOJ2618]CQOI2006凸多边形|扫描线
- [BZOJ2618][Cqoi2006]凸多边形(半平面交)
- 半平面交 模板 bzoj2618 【Cqoi2006】凸多边形
- bzoj2618 [Cqoi2006]凸多边形(半平面+S)
- BZOJ2618凸多边形
- 【CQOI2006】凸多边形
- [CQOI2006] 凸多边形
- 【BZOJ2618】【Cqoi2006】凸多边形 半平面交 、算法的深度细节剖析。
- bzoj2618凸多边形面积交
- BZOJ-2618-凸多边形-CQOI2006
- bsoj1156 【CQOI2006】 凸多边形
- 2618: [Cqoi2006]凸多边形
- BZOJ 2618: [Cqoi2006]凸多边形
- 【CQOI2006】凸多边形 计算几何
- BZOJ 2618 [Cqoi2006]凸多边形
- SPARK必备概念
- TX1上Caffe Deep Learning Framework with cuDNN Support安装
- 上三角
- 给DNS设置KEY
- Android-动态加载插件化的两种实现方式(二):接口
- bzoj2618: [Cqoi2006]凸多边形
- CODE[VS] 青铜Bronze 整数处理 1202:求和
- Windows 钩子函数
- 年轻 ——塞缪尔·乌尔曼
- 程序4--日期是一年的第几天
- ListView通用适配器
- Wireshark基本介绍和学习TCP三次握手
- Qt学习之路(37): Qt容器类之关联存储容器
- 常用三方