国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

bzoj 2618: [Cqoi2006]凸多邊形 (半平面交)

2019-11-08 03:16:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

2618: [Cqoi2006]凸多邊形

Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1195  Solved: 608[Submit][Status][Discuss]

Description

逆時(shí)針給出n個(gè)凸多邊形的頂點(diǎn)坐標(biāo),求它們交的面積。例如n=2時(shí),兩個(gè)凸多邊形如下圖:

則相交部分的面積為5.233。

Input

第一行有一個(gè)整數(shù)n,表示凸多邊形的個(gè)數(shù),以下依次描述各個(gè)多邊形。第i個(gè)多邊形的第一行包含一個(gè)整數(shù)mi,表示多邊形的邊數(shù),以下mi行每行兩個(gè)整數(shù),逆時(shí)針給出各個(gè)頂點(diǎn)的坐標(biāo)。

 

Output

    輸出文件僅包含一個(gè)實(shí)數(shù),表示相交部分的面積,保留三位小數(shù)。

 

Sample Input

26-2 0-1 -21 -22 01 2-1 240 -31 -12 2-1 0

Sample Output

5.233

HINT

100%的數(shù)據(jù)滿足:2<=n<=10,3<=mi<=50,每維坐標(biāo)為[-1000,1000]內(nèi)的整數(shù)

Source

[Submit][Status][Discuss]

題解:半平面交

#include<iostream>  #include<cstdio>  #include<algorithm>  #include<cstring>  #include<cmath>  #define  N 2000  #define eps 1e-8  #define inf 1e9  using namespace std;  struct vector {      double x,y;      vector (double X=0,double Y=0){          x=X,y=Y;      }  }a[N],p[N],tmp[N];  typedef vector point;  vector Operator -(vector a,vector b){      return vector (a.x-b.x,a.y-b.y);  }  vector operator +(vector a,vector b){      return vector (a.x+b.x,a.y+b.y);  }  vector operator *(vector a,double t){      return vector (a.x*t,a.y*t);  }  int n,m; int dcmp(double x){	if (fabs(x)<eps) return 0;	return x<0?-1:1;} double cross(vector a,vector b)  {      return a.x*b.y-a.y*b.x;  }  point glt(point a,point a1,point b,point b1)  {      vector v=a1-a; vector w=b1-b;      vector u=a-b;      double t=cross(w,u)/cross(v,w);      return a+v*t;  }  void init()  {     m=0;     p[m++]=point(inf,inf);     p[m++]=point(-inf,inf);     p[m++]=point(-inf,-inf);     p[m++]=point(inf,-inf);  }  void cut(point a,point b)  {      int cnt=0;      memset(tmp,0,sizeof(tmp));      for (int i=0;i<m;i++){          double c=cross(b-a,p[i]-a);          double d=cross(b-a,p[(i+1)%m]-a);          if (dcmp(c)<=0) tmp[cnt++]=p[i];          if (dcmp(c)*dcmp(d)<0)            tmp[cnt++]=glt(a,b,p[i],p[(i+1)%m]);      }      m=cnt;      for (int i=0;i<cnt;i++) p[i]=tmp[i];  }  int main()  {      freopen("a.in","r",stdin);      int T;      scanf("%d",&T);      init();    for (int t=1;t<=T;t++) {	    scanf("%d",&n);	    for (int j=1;j<=n;j++) scanf("%lf%lf",&a[j].x,&a[j].y);	    a[n+1]=a[1];        for (int i=2;i<=n+1;i++)            cut(a[i],a[i-1]);  	}    double area=0;      p[m]=p[0];      for (int i=1;i<m;i++)        area+=cross(p[i]-p[0],p[i+1]-p[0]);      PRintf("%.3lf/n",fabs(area)/2);   }  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 屏东县| 马山县| 加查县| 惠东县| 辉县市| 岐山县| 牙克石市| 南丰县| 华亭县| 大庆市| 岱山县| 临海市| 大化| 定结县| 河津市| 库车县| 梁河县| 县级市| 柏乡县| 北碚区| 丹东市| 威远县| 游戏| 荆州市| 河西区| 涿州市| 永兴县| 庄浪县| 甘洛县| 鱼台县| 策勒县| 隆子县| 万荣县| 普洱| 盐亭县| 喀喇| 宁城县| 郯城县| 洪湖市| 扶余县| 舒城县|