數軸上有 n (1<=n<=25000)個閉區間 [ai, bi],選擇盡量少的區間覆蓋一條指定線段 [1, t]( 1<=t<=1,000,000)。覆蓋整點,即(1,2)+(3,4)可以覆蓋(1,4)。
不可能辦到輸出-1
input:這題我們使用的方法也是貪心演算法,貪心準則是區間左端點的大小。在這裡我們首先根據輸入的資料按其左端點公升序排序。然後在所有的區間中如果最小的左端點小於1就可以直接得到不可以覆蓋,輸出-1;否則將需要覆蓋的起點left賦值為初始起點(即1),然後遍歷區間,如果區間的左端點小於等於起點,並且它的右端點大於maxright則更新maxright。否則更新起點為maxright+1,此時再接著判斷區間的左端點和left的大小關係,判斷區間的連線是否中斷如果沒有中斷則更新maxright,只要maxright大於等於t的時候就可以得到ans,如果最後的maxright小於t則表示無法覆蓋,輸出-1。第一行:n和t
第二行至n+1行: 每一行乙個閉區間。
output:
選擇的區間的數目,不可能辦到輸出-1
exmaple:
input:
3 10
1 73 6
6 10
output:
2
#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 樣例輸...