題目鏈結
思路
保證思路的有序性。
如果拿出來每一條邊與其他邊進行比較,那麼一定可以得出答案。
但是一條邊[l,r]只能和與它有交集的邊產生可能。那麼進行排序,按照左端點,在某條邊的l大於當前選擇的邊的r時break。
能否在o(n)的演算法處理呢?
也就是說,列舉的區間是有選擇性的。
假設當前選定的區間是a。
那麼之後的區間有ecde四種情況,再加上 無交集的情況。
1.如果是b,c,e,那麼還是以a去掃瞄後面的區間,因為a是覆蓋b,c,e
2.如果是e,那麼e之後的區間的左端點都是大於l5,此時選定的區間應該從a轉移到e
#include using namespace std;
struct node
};vectorvec;
bool cmp(node a,node b)
int main()
sort( vec.begin(),vec.end(),cmp ) ;
int p = 0 ;
int l=vec[p].left,r=vec[p].right;
p++;
intlen = 0;
while ( pif ( vec[p].right
<= r ) else
p++;
}cout<
<0;
}
1091 線段的重疊
x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。input 第1行 線段的數量n 2 n 50000 第2 ...
1091 線段的重疊
x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。收起第1行 線段的數量n 2 n 50000 第2 n 1行...
1091 線段的重疊
1091 線段的重疊 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 收藏關注x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分...