在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),且n條直線兩兩不重合.求出所有可見的直線.
第一行為n(0 < n < 50000),接下來的n行輸入ai,bi
從小到大輸出可見直線的編號,兩兩中間用空格隔開,最後乙個數字後面也必須有個空格
-1 0
1 00 0
1 2首先,如果斜率相同,顯然只需要留下截距大的直線
去掉沒有用的直線之後
剩餘直線按照斜率從小到大排序
用乙個單調棧來維護每條直線
如果當前新加的直線與top的交點在top-1的交點的左側
證明這條直線可以被完全覆蓋
然後就不難了
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define max 55000
inline int read()
int n,tot;
struct linee[max];
bool cmp(line a,line b)
double ppp(int x,int y)
int s[max],ans[max],top=0;
int main()
sort(&ans[1],&ans[top+1]);
for(int i=1;i<=top;++i)printf("%d ",ans[i]);puts("");
return 0;
}
BZOJ 1007 水平可見直線
題意 給出一些直線。從y軸正方向無窮遠處向下看能看到哪些?思路 如下圖,首先將直線按照斜率公升序排序,我們維護乙個單調的棧,棧頂top,設x i,j 表示i和j直線交點的橫座標,那麼x top,top 1 x i,top 時top可以被top 1和i完全覆蓋。比如下圖,首先我們將1和2壓入棧中。對於...
bzoj1007 水平可見直線
在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 且...
BZOJ1007水平可見直線 凸包
在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 且...