bzoj1007 HNOI2008 水平可見直線

2022-05-18 06:23:14 字數 2051 閱讀 3633

time limit: 1 sec  memory limit: 162 mb

submit: 4365  solved: 1599

在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

從小到大輸出可見直線的編號,兩兩中間用空格隔開,最後乙個數字後面也必須有個空格

3-1 0

1 00 0

1 2題意:題目就很簡明

分析:先按斜率從小到大排列,如果排序後第1,3的直線遮住了第2的直線,那麼2,3的交點必定在1,2的交點的左側,

證明顯然,

綜上所述,本題得解

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 

12 #include 13

using

namespace

std;

14 typedef long

long

ll;15 typedef double

db;16

#define for(i, s, t) for(int i = (s); i <= (t); i++)

17#define ford(i, s, t) for(int i = (s); i >= (t); i--)

18#define mit (2147483647)

19#define inf (1000000001)

20#define mll (1000000000000000001ll)

21#define sz(x) ((bnt) (x).size())

22#define clr(x, y) memset(x, y, sizeof(x))

23#define puf push_front

24#define pub push_back

25#define pof pop_front

26#define pob pop_back

27#define ft first

28#define sd second

29#define mk make_pair

30 inline void setio(string

name)

3637

const

int n = 50010;38

const db eps = 1e-5

;39 typedef pairdd;

40 typedef pairii;

41 mapint>map;

42ii l[n];

43int

n;44

intstack[n], len;

4546 inline void

input()

5051

inline dd work(ii l1, ii l2)

5960 inline void

solve()

80 stack[++len] =i;81}

82}8384 for(i, 1

, len)

89 sort(stack+1, stack+1+len);

90 for(i, 1, len) cout

91}9293

intmain()

view code

思考:原本我是想判斷1,3的交點是否在1,2的左側,如果是則2被覆蓋(因為已經按斜率排序了),

我感覺這個做法沒問題,可是提交後wa了,請神牛告訴我為什麼不對

BZOJ1007 HNOI2008 水平可見直線

description 在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的形式...

bzoj1007 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 且...

狡猾的商人 bzoj1202,HNOI2005

ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...