Week3 作業C 區間覆蓋

2021-10-03 20:56:10 字數 1052 閱讀 3535

數軸上有 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 選擇的區間的數目,不可能辦到...