P3194 水平可見直線 計算幾何 單調棧

2021-10-10 21:11:17 字數 1171 閱讀 2309

單調棧存放直線,把直線按斜率公升序排序列舉l

il_i

li​與棧頂直線的交點如果在棧頂與次棧頂的交點左邊,那麼棧頂代表的直線是不可視的,彈出。

#include

#include

#include

#include

#include

using

namespace std;

const

double eps =

1e-8

;const

double inf =

1e20

;const

int n =

50050

;int

sgn(

double x)

struct point

}last;

struct line

void

input

(int x)

point operator^(

const line& p)

const

}l[n]

, st[n]

;bool

cmp(line& l1, line& l2)

bool

cmp1

(line& l1, line& l2)

int tot;

intmain()

if(sgn(st[tot]

.a-l[i]

.a)==0)

continue;

point ne = st[tot]

^l[i]

;while

(sgn

(ne.x-last.x)

<=

0&& tot >1)

last = l[i]

^st[tot]

; st[

++tot]

= l[i];}

sort

(st+

1, st+tot+

1, cmp1)

;for

(int i =

1; i <= tot; i++

)printf

("%d "

, st[i]

.id)

;return0;

}

正確性證明P3194

link social zhao s tj 設直線 l k ix b i 其中 k 1 lt 0 le k 3 lt k 2 設 l 1 與 l 2 交點 p x,y 有 if k 1x b 1 ge k 3x b 3 l 3 is invisible.又 k 1x b 1 k 2x b 2 x f...

HNOI 2008 水平可見直線

hnoi 2008 水平可見直線 在 xoy 直角座標平面上有n條直線 l1,l2,ln,若在y 值為正無窮大處往下看,能見到 li的某個子線段,則稱 li為可見的,否則 li為被遮蓋的。例如,對於直線 l1 y x l2 y x l3 y 0 則 l1和l2是可見的,l3是被遮蓋的。給出 n 條直...

HNOI 2008 水平可見直線

傳送門 題目描述 在 xo yxoy xoy 直角座標平面上有 n nn 條直線 l1,l2,l nl 1,l 2,l n l1 l2 ln 若在 y yy 值為正無窮大處往下看,能見到 l il i li 的某個子線段,則稱 l il i li 為可見的,否則 l il i li 為被覆蓋的。例如...