試題 歷屆試題 區間移位

2021-10-23 03:41:22 字數 877 閱讀 8573

1.把所有的區間左右端點讀入,並且端點都乘以2,也就是擴大兩倍,因為後面要二分答案,但是答案又會有0.5的小數字,二分的答案就會是擴大兩倍就會是整數,以便更好二分,只要最後答案/2就可以了

2.區間按右端點排序

3.開始二分答案,記最大移動距離為mid,記當前沒有被覆蓋的區間點:k=0,列舉所有的區間,如果k在[ai-mid,bi+mid]內,就說明能被該區間覆蓋,這裡有貪心,如果能接到左區間端點上,也就是ai+mid<=k,就接到左端點上,此時k更新為k+(bi-ai),如果不能,那麼k就會更新到右端點bi+mid的位置,也就是盡可能往右覆蓋

#include

using

namespace std;

const

int maxn =

20000

;int n;

struct node

;vector reg;

bool

cmp(node x,node y)

bool

check

(int x)}if

(!found || k>=maxn)

break;}

return k>=maxn;

}int

main()

);}sort

(reg.

begin()

,reg.

end(

),cmp)

;int l =

0,r = maxn;

double ans =0;

while

(l<=r)

else

} ans/

=2.0

; cout

}

歷屆試題 區間移位

問題描述 數軸上有n個閉區間d1,dn。其中區間di用一對整數 ai,bi 來描述,滿足ai bi。已知這些區間的長度之和至少有10000。所以,通過適當的移動這些區間,你總可以使得他們的 並 覆蓋 0,10000 也就是說 0,10000 這個區間內的每乙個點都落於至少乙個區間內。你希望找乙個移動...

試題 歷屆試題 k倍區間

試題 歷屆試題 k倍區間 資源限制 時間限制 2.0s 記憶體限制 256.0mb 問題描述 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?輸入格式 第一行包...

試題 歷屆試題 連號區間數

提交此題 評測記錄 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l ...