描述
數軸上有 n 個閉區間 [ai, bi],選擇盡量少的區間覆蓋一條指定線段 [1, t]。輸入不可能辦到輸出-1
注意,輸入包含多組測試資料,請處理到檔案結束輸出第一行:n和
第二行至n+1行: 每一行乙個閉區間。
選擇的區間的數目,不可能辦到輸出-1樣例輸入
3 10樣例輸出 提示1 73 6
6 10
這道題輸入資料很多,請用scanf而不是cin我的思路:
這道題我是用貪心演算法解決的。首先,明確題意,用多個區間去覆蓋一段長度,且要盡量少。那麼,我們可以先對區間以左端點進行公升序排序。再遍歷這個區間陣列,若是遍歷到的區間與當前區間斷開了,則記錄當前區間的索引,並把上乙個最大區間的右端點設定為當前節點,若此時這個右端點大於或等於t,則結束遍歷。特別注意,若出現兩個相鄰區間之間隔著乙個或多個數,則不滿足條件,直接跳出迴圈。遍歷到區間陣列末尾的時候,若達到要求,則所選區間數加一,否則不滿足條件。
我的**
#include
#include
#include
using
namespace std;
struct duan
ti[250000];
int n,t;
bool
compare
(const duan& x,
const duan& y)
intmain()
sort
(ti,ti+n,compare)
;int num =0;
int c=
1,k=
0,l=
1,i;
bool is =
false
;while
(c<=t)
else
}else}}
//cout(i==n)}if
(is)
printf
("-1");
else
printf
("%d"
,num)
;return0;
}
week3作業 C 區間覆蓋
描述 數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1 輸入 第一行 n和t 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1...
Week3 作業C 區間覆蓋
數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1 第一行 n和t 第二行至n 1行 每一行乙個閉區間。選擇的區間的數目,不可能辦到輸出 1。3 10 1 7...
week3 作業C 區間覆蓋
數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1。input 第一行 n和t 第二行至n 1行 每一行乙個閉區間。output 選擇的區間的數目,不可能辦到...