Gym 270437B 區間選點

2021-10-03 20:14:49 字數 1031 閱讀 4514

區間選點

數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)

input

第一行1個整數n(n<=100)

第2~n+1行,每行兩個整數a,b(a,b<=100)

output

乙個整數,代表選點的數目

解題思路

定義乙個結構體,把每個區間的左右都記錄下來。尋找乙個貪心演算法。我先在結構體內過載了小於號便於排序sort,把這些區間按右端點從小到大排序,至於相等的時候,左端點怎麼排都可以,我們不關心。

然後就開始遍歷,令乙個r等於當前區間由端點的值,然後尋找後面區間的左端點大於r的 區間,這樣,該區間前面的所有區間,都有共同的點(至少有r這個點吧),然後在把新的區間的右端點賦值給r,迴圈。

**實現

#include

#include

using

namespace std;

struct p};

p p[

100]

;int

main()

sort

(p,p+n)

;int r;

//用來裝右點的

int ri =1;

//右點切換次數就是有多少個點

r = p[0]

.r;for

(int i=

1;i)//更換右點

// cout<

cout<

return0;

}

小結該題寫下來後其實看起來並不難,但是尋找貪心策略的思路還挺難的。

區間選點 Gym 270437B

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output乙個整數,代表選點的數目examples input 21 5 4 6output...

B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 乙個整數,代表選點的數目。input 21 5 4 6output 1input 31 3 2 54 6...

B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目examples input 2 1 54 6outp...