數軸上有 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 73 6
610
2
本題目解法不難,難在極易超時,需要優化各種操作減少時間複雜度。
基本思路:
貪心演算法,從[a,b]=[1,1]開始,每次找覆蓋[a,b]的最大區間,將b更新為最大區間的右端點,沒有覆蓋的則次數+1,b=b+1(離散型區間),a=b+1,繼續進行上述操作直到所有區間都判斷過,或者某次得到的結果覆蓋所給區間。
優化:
#include
#include
using
namespace std;
struct section
;int
compare
(section x,section y)
intmain()
} section m;
sort
(s,s+n,compare)
;int count=1;
int begin=1;
//找包含begin的最大的
int end=1;
int i=0;
bool change;
while
(ii++;}if
(end>t)
begin=end;
if(i.a)break;if
(change==
true
) count++;}
printf
("-1\n");
return0;
}
區間覆蓋(week3 作業C)
描述 數軸上有 n 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1 輸入 注意,輸入包含多組測試資料,請處理到檔案結束 第一行 n和 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1 樣例輸入 3 10 1 73 6 6 10 樣例輸...
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。input 第一行 n和t 第二行至n 1行 每一行乙個閉區間。output 選擇的區間的數目,不可能辦到...