51 Nod 1091 線段的重疊 貪心演算法

2021-08-22 03:14:01 字數 931 閱讀 7020

思路分析:通過讀題不難發現這是一道涉及貪心演算法的題,剛開始上手做也是摸不著頭腦。首先把所有的線段按起點由小到大進行排序,比如(1,5),(2,4),(2,8),(3,7),(7,9), 然後進行比較,每次比較保留最大的末尾數字,最終結果就是 max(min(最大末尾數字,本次末尾數字)- 本次起始數字,上次的比較結果);

舉個栗子:

/* 

1 5

2 4

2 8

3 7

7 9

*/// 第一次

max = 5, ans = 0;

// 第二次

max = 5, ans = 4 - 2 = 2

// ans = max(min(5, 4) - 2, 0) = 4

// 第三次

max = 8, ans = 5 - 2 = 3

// max = max(5, 8) = 8, ans = max(min(5, 8) - 2, 2) = 3

// 第四次

max = 8, ans = 7 - 3 = 4

// ans = max(min(8, 7) - 3, 3) = 4

// 第五次

max = 8, ans = 4

**如下:

#include #include using namespace std;

typedef pairp;

const int max = 50000;

p a[max];

int n;

int main()

cout << ans << endl;

return 0;

}

51nod 1091 線段的重疊

基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。...

51nod1091 線段的重疊

x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。input 第1行 線段的數量n 2 n 50000 第2 ...

51Nod 1091 線段的重疊

x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。input 第1行 線段的數量n 2 n 50000 第2 ...