1007 HNOI2008 水平可見直線

2022-05-03 13:06:26 字數 643 閱讀 9376

//

因為要求的是從上方看下來可以看到的直線

//畫一下圖可以發現能看見的是上邊的乙個下凸殼

//然後就單調棧維護一下斜率就好了

#include

#include

#include

#include

using

namespace

std;

const

int n=5e4+5

;int

n;struct

line

l[n],sta[n];

inttop;

bool

cmp1(line a,line b)

bool

cmp2(line a,line b)

double

calc(line x,line y)

intmain()

sort(l+1,l+n+1

,cmp1);

for(int i=1;i<=n;++i)

sort(sta+1,sta+top+1

,cmp2);

for(int i=1;i<=top;++i)

cout

<'';

return0;

}

1007 HNOI2008 水平可見直線

time limit 1 sec memory limit 162 mb submit 5879 solved 2238 submit status discuss 在xoy直角座標平面上有n條直線l1,l2,ln,若在y值為正無窮大處往下看,能見到li的某個子線段,則稱li為 可見的,否則li為被...

1007 HNOI2008 水平可見直線

在xoy直角座標平面上有n條直線l1,l2,ln,若在y值為正無窮大處往下看,能見到li的某個子線段,則稱li為可見的,否則li為被覆蓋的.例如,對於直線 l1 y x l2 y x l3 y 0 則l1和l2是可見的,l3是被覆蓋的.給出n條直線,表示成y ax b的形式 a b 500000 且...

1007 HNOI2008 水平可見直線

先對a排序,a相等的話就對b排序 維護乙個棧,每次取棧的頭兩個,和當前的直線相比較 如果當前的直線把頭第乙個遮蔽,就將他出棧,一直到不能遮蔽為止 include include include define maxn 500005 using namespace std intst maxn top...