區間覆蓋(week3 作業C)

2021-10-03 13:10:42 字數 1420 閱讀 6344

描述

數軸上有 n 個閉區間 [ai, bi],選擇盡量少的區間覆蓋一條指定線段 [1, t]。

不可能辦到輸出-1

輸入

注意,輸入包含多組測試資料,請處理到檔案結束

第一行:n和

第二行至n+1行: 每一行乙個閉區間。

輸出

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

樣例輸入

3 10

1 73 6

6 10

樣例輸出

提示

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

我的思路:

這道題我是用貪心演算法解決的。首先,明確題意,用多個區間去覆蓋一段長度,且要盡量少。那麼,我們可以先對區間以左端點進行公升序排序。再遍歷這個區間陣列,若是遍歷到的區間與當前區間斷開了,則記錄當前區間的索引,並把上乙個最大區間的右端點設定為當前節點,若此時這個右端點大於或等於t,則結束遍歷。特別注意,若出現兩個相鄰區間之間隔著乙個或多個數,則不滿足條件,直接跳出迴圈。遍歷到區間陣列末尾的時候,若達到要求,則所選區間數加一,否則不滿足條件。

我的**

#include

#include

#include

using

namespace std;

struct duan

ti[250000];

int n,t;

bool

compare

(const duan& x,

const duan& y)

intmain()

sort

(ti,ti+n,compare)

;int num =0;

int c=

1,k=

0,l=

1,i;

bool is =

false

;while

(c<=t)

else

}else}}

//cout(i==n)}if

(is)

printf

("-1");

else

printf

("%d"

,num)

;return0;

}

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