week3 C 區間覆蓋(不支援C 11)

2021-10-04 03:28:33 字數 1110 閱讀 8181

數軸上有 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:

選擇的區間的數目,不可能辦到輸出-1

exmaple:

input:

3 10

1 73 6

6 10

output:

2

這題我們使用的方法也是貪心演算法,貪心準則是區間左端點的大小。在這裡我們首先根據輸入的資料按其左端點公升序排序。然後在所有的區間中如果最小的左端點小於1就可以直接得到不可以覆蓋,輸出-1;否則將需要覆蓋的起點left賦值為初始起點(即1),然後遍歷區間,如果區間的左端點小於等於起點,並且它的右端點大於maxright則更新maxright。否則更新起點為maxright+1,此時再接著判斷區間的左端點和left的大小關係,判斷區間的連線是否中斷如果沒有中斷則更新maxright,只要maxright大於等於t的時候就可以得到ans,如果最後的maxright小於t則表示無法覆蓋,輸出-1。

#include

#include

#include

using

namespace std;

struct section};

int n , t , ans;

intmain()

else

else

//更新起點

maxright = t[i]

.b;}

if(maxright >= t)}if

(maxright < t)

printf

("-1\n");

}}}

在這個題目中由於輸入的資料較多,我們需要使用scanf讀入資料而不能使用cin,否則肯能會tl,這裡我們可以知道scanf需要的時間比cin要少很多,所以盡量使用scanf。另外也可以使用快速讀入的方法。

程式設計Week3 C 區間覆蓋

給出n個閉區間段,要求選擇盡可能少的區間,來完全覆蓋一條指定線段,僅考慮覆蓋整數點。第一行 n 1 n 25000 和t 1 t 1,000,000 第二行至n 1行 每一行乙個閉區間。輸出選擇的區間個數,若不可能則輸出 1。貪心策略,選擇區間的左端點作為貪心指標,在按照如下的策略進行選擇 incl...

C 區間覆蓋(不支援C 11)

數軸上有 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 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1 輸入 注意,輸入包含多組測試資料,請處理到檔案結束 第一行 n和 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1 樣例輸入 3 10 1 73 6 6 10 樣例輸...