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

2021-10-03 13:46:05 字數 1136 閱讀 5086

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