模板 半平面交

2022-04-29 20:36:09 字數 2102 閱讀 1270

考慮用射線(乙個點和乙個向量)表示它左側的半平面

那麼我們可以先按與x軸正半軸夾角(可用atan2(y,x)實現)排序,然後再用雙端佇列維護當前在交中的射線即可

之所以要用雙端佇列,是因為新插入乙個半平面時隊首和隊尾都有可能被彈出,而且要注意的是,要先彈隊尾再彈隊首

在最後,還要再用隊首的彈一些隊尾的

luogu4196 凸多邊形

1 #include2

#define pa pair3

#define clr(a,x) memset(a,x,sizeof(a))

4#define mp make_pair

5#define fi first

6#define se second

7using

namespace

std;

8 typedef long

long

ll;9 typedef unsigned long

long

ull;

10 typedef unsigned int

ui;11 typedef long

double

ld;12

const

int maxl=2333,maxn=12,maxm=55;13

const ld eps=1e-9;14

15 inline char

gc()

20inline ll rd()

23while(c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+c-'

0',c=gc();

24return neg?(~x+1

):x;25}

2627

struct

node

30}p[maxn][maxm],it[maxl];

31struct

line

34}l[maxl];

35int

n,m[maxn],cnt;

36int

hd,tl,q[maxl];

3738 inline ld operator ^(const node a,const node b)

39 inline node operator +(const node a,const node b)

40 inline node operator -(const node a,const node b)

41 inline node operator *(const node a,const ld b)

42 inline ld myabs(const ld x)

43 inline node inter(const line a,const

line b)

47 inline bool onright(const line a,const node b)

48 inline ld slope(line a)

4950 inline bool

cmp(line a,line b)

5455

inline ld solve()

65while(hd1]]))) tl--;

66//

while(hd67

//for(int i=hd;i<=tl;i++) printf("~%lf %lf %lf %lf\n",l[q[i]].x.x,l[q[i]].x.y,l[q[i]].y.x,l[q[i]].y.y);

68if(hd+2>tl) return0;

69 ld re=0

;70 q[tl+1]=q[hd];int n=0;71

for(int i=hd;i<=tl;i++) it[++n]=inter(l[q[i]],l[q[i+1

]]);

72for(int i=2;i1])^(it[i+1]-it[1

]));

73return re/2;74

}7576int

main()86}

87 printf("

%.3lf\n

",solve());

88return0;

89 }

半平面交模板

妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...

模板 半平面交

逆時針給出n個凸多邊形的頂點座標,求它們交的面積。例如n 2時,兩個凸多邊形如下圖 則相交部分的面積為5.233。第一行有乙個整數n,表示凸多邊形的個數,以下依次描述各個多邊形。第i個多邊形的第一行包含乙個整數mi,表示多邊形的邊數,以下mi行每行兩個整數,逆時針給出各個頂點的座標。輸出檔案僅包含乙...

半平面交總結and模板

這兩天刷了poj上幾道半平面交,對半平面交有了初步的體會,感覺半平面交還是個挺有用的知識點。半平面交主要是看的zzy的國家隊 他提出的是一種o n log n 的排序增量法。poj 3335 rotating scoreboard 題目大意 world finals 要開始了,比賽場地是乙個多邊形。...