week3作業 C 區間覆蓋

2021-10-03 17:40:37 字數 1204 閱讀 4791

描述

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

6 10

樣例輸出

2提示

這道題輸入資料很多,請用scanf而不是cin

解題思路:

先進行一次預處理,把每個區間在[1, t] 外的部分都應該預先被切掉,因為它們的存在是毫無意義的(不過我忘弄了,請忽略)。用t陣列表示左端點ai開始的區間的右端點最大值。選擇此區間[ai, bi] 後,新的起點應 該設定為bi,如此找下去。直到右端點到達為止。中途如果新的maxn小於等於上一次區間的右端點,則終止迴圈。

#include

#include

#include

using

namespace std;

int t[

1000005];

//t[i]表示以i開始的所有的線段中右端點最大的值

intmain()

int len=

0,las=

0,s=0;

bool flag=

false

;//flag標記量變為1則輸出-1,w為0則輸出s;s:貪心求解得出的最少區間數;len左端點,las右端點;

while(1

)if(maxn<=las)

s++;

len=x;

las=maxn;

if(las==t)

break;}

if(flag)

printf

("-1\n");

else

printf

("%d\n"

,s);

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