單調棧存放直線,把直線按斜率公升序排序列舉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 為被覆蓋的。例如...