這裡套用wuvin
逆時針給出n個凸多邊形的頂點座標,求它們交的面積。例如n=2時,兩個凸多邊形如下圖:
則相交部分的面積為5.233。
第一行有乙個整數n,表示凸多邊形的個數,以下依次描述各個多邊形。第i個多邊形的第一行包含乙個整數mi
,表示多邊形的邊數,以下mi
行每行兩個整數,逆時針給出各個頂點的座標。
輸出檔案僅包含乙個實數,表示相交部分的面積,保留三位小數。26
-2 0
-1 -2
1 -2
2 01 2
-1 2
40 -3
1 -1
2 2-1 0
5.233
100%的資料滿足:2<=n
<=10,3<=mi
<=50,每維座標為[-1000,1000]內的整數
半平面交裸題
主要是**很煩吧···一定要理清點與點之間的關係,多畫圖幫助理解;
#include#include#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=250005
;struct
point
p[n],a[n];
struct
line
l[n],q[n];
inline
double
operator *(point a,point b)
inline point
operator -(point a,point b)
inline point inter(line a,line b)
bool
jud(line a,line b,line c)
intn,k,cnt,tot;
double
ans;
bool
comp(line a,line b)
void
build()
int left=1,right=0
; q[++right]=l[1
]; q[++right]=l[2
]; cnt=tot,tot=0;
for(int i=3;i<=cnt;i++)
while(left1],q[right],q[left])) right--;
while(left1],q[left],q[right])) left++;
q[right+1]=q[left];
for(int i=left;i<=right;i++)
a[++tot]=inter(q[i],q[i+1
]);
}void
getans()
intmain()
} /*for(int i=1;i<=cnt;i++)
cout
for(int i=1;i<=cnt;i++)
l[i].slope=atan2(l[i].b.y-l[i].a.y,l[i].b.x-l[i].a.x);
build();
getans();
printf(
"%.3lf\n
",ans);
return0;
}
BZOJ2618 半平面交)
逆時針給出n個凸多邊形的頂點座標,求它們交的面積。給你n個凸多邊形,求多邊形的交的面積 給你一堆邊,讓你求半平面交的面積 半平面交模板 定義點 struct tpoint 定義線 一點 一方向 struct tline 1.定義半平面為向量的左側 逆時針給出,只需要後乙個減前乙個是方向 2.將所有向...
BZOJ 2732 射箭(半平面交)
題意 給出n條第一象限內的豎直線段。求乙個最大的k,使得某條經過原點的拋物線穿過前k條線段。思路 設線段為 x,y1,y2 設拋物線為y ax 2 b x,那麼有 y1 ax 2 bx y2。據此可得到穿過該線段的拋物線引數a和b的兩個方程,這兩個方程是線性的。因此,可以半平面交,直到半平面內的點構...
bzoj 3190 賽車 半平面交
直接寫的裸的半平面交,已經有點背不過模板了。這題卡精度,要用long double esp設1e 20。include include include include include include include define n 20005 define double long double d...