數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)input第一行1個整數n(n<=100)
第2~n+1行,每行兩個整數a,b(a,b<=100)output乙個整數,代表選點的數目
21 5
4 63
1 32 5
4 6step0 將輸入的區間範圍按b從小到大且b相同時a從大到小排序
step1 將b最小的區間取出,用指標p記錄
step2 取出第乙個a比前一次取出區間b大的區間,將其p更新為指向該區間
step3 遍歷完所有的區間,輸出點的數量
1、結果錯誤,檢查發現錯誤**部分:
int count=
0,i=
0,p=0;
count++
;while
(i
注意到在最後乙個區間處i會超過n的範圍,可能導致錯誤,且即使不超過n的範圍也會再增一,邏輯錯誤,改正如下:
int count=
0,i=
0,p=0;
count++
;while
(i}
輸出結果正確
該題利用了貪心思想,將區間按b從小到大且b相同時a從大到小排序,這樣用乙個整形指標p遍歷陣列時,每次碰到第乙個不包含已有點的區間時,即為所有區間中所需新放點的最大座標最小的點,不斷取這個點即可得到最少的滿足覆蓋所有區間的點。
將a按從大到小排序可以方便找到b相同時最大的a,方便立即取出無法用已有點覆蓋的區間。
#include
#include
using
namespace std;
struct qujian
}q[1000];
intmain()
sort
(q,q+n)
;int count=
0,i=
0,p=0;
count++
;while
(i} cout<}
B 區間選點(編譯器選GNU G )
數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 examples input 21 5 4 6out...
GNU的g 編譯器備忘
之前編c 都只是用vs2012,現在要開始學習用gnu的g 編譯器,下面是寫著備忘的筆記。windows 上的安裝g 應用說明 程式 g 是將 gcc 預設語言設為 c 的乙個特殊的版本,鏈結時它自動使用 c 標準庫而不用 c 標準庫。通過遵循原始碼的命名規範並指定對應庫的名字,用 gcc 來編譯鏈...
安裝 GNU 的 C C 編譯器
如果您使用的是 linux 或 unix 請在命令列使用下面的命令來檢查您的系統上是否安裝了 gcc g v 如果您的計算機上已經安裝了 gnu 編譯器,則會顯示如下訊息 using built in specs.target i386 redhat linux configured with co...