數軸上有 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
step0 將區間錄入陣列,並按a從小到大排序
step1 將第乙個區間的右端點設為max,左端點設為min,count=1
step2 不斷取出新的區間,當左端點<=min時判斷該區間右端點與max的大小,將較大者置為新的max,當左端點》min時轉到step3
step3 當max《新取出區間的a時,將flag置為1同時跳出取區間的迴圈。否則將max+1設為新的min,max=新的區間的b,並且將count+1,當max>=t時輸出count
step4 當取區間迴圈結束後,在max
1、沒有注意到當區間不滿足時需要輸出-1
2、第一次使用while套while迴圈超時,故將其展成對q結構體陣列的遍歷,在遍歷中分別判斷是找該點可覆蓋的最大區間、加入新的區間、無法覆蓋等情況,減小複雜度
#include
#include
#include
using
namespace std;
struct qujian
}q[25001];
intmain()
sort
(q,q+n)
;int p,max=
0,p_max,min=1;
bool flag=0;
//是否無法佔滿區間
for(
int i=
0;i}else
//當已遍歷完a小於等於min的區間時,此時max記錄所有這些區間中b的最大值,將所需新區間的最大min更新為max+1
max=q[i]
.b; count++;if
(max>=t)}}
if(maxcout<<
"-1"
}
week3 C 區間覆蓋(不支援C 11)
數軸上有 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 選擇的區間的數目,不可能辦到...
藍橋杯競賽C C 組不支援C 11特性
所以不能使用to string stoi stol auto unordered map unordered set這些好用的函式啦 官方給出的解釋是 問 假如是面向企業的為什麼不用11標準?答 因為企業最大資產是源程式,在已經存在的所有源程式中,89標準的佔一半以上,加上99標準的佔絕大部分,11...
C 不支援此安全協議
開始在本地呼叫https介面的時候,程式丟擲 基礎連線已關閉 的錯誤。後來在 中加上 servicepointmanager.servercertificatevalidationcallback delegate servicepointmanager.securityprotocol secur...