試題 歷屆試題 區間移位(二分求最大值最小)

2021-10-06 08:27:33 字數 1649 閱讀 7196

問題描述

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

你希望找乙個移動方法,使得位移差最大的那個區間的位移量最小。

具體來說,假設你將di移動到[ai+ci, bi+ci]這個位置。你希望使得maxi |ci|  最小。

輸入格式

輸入的第一行包含乙個整數n,表示區間的數量。

接下來有n行,每行2個整數ai,  bi,以乙個空格分開,表示區間[ai, bi]。保證區間的長度之和至少是10000。

輸出格式

輸出乙個數,表示答案。如果答案是整數,只輸出整數部分。如果答案不是整數,輸出時四捨五入保留一位小數。

樣例輸入

2

10 5010

4980 9980

樣例輸出

20
樣例說明

第乙個區間往左移動10;第二個區間往右移動20。

樣例輸入

4

0 4000

3000 5000

5001 8000

7000 10000

樣例輸出

0.5
樣例說明

第2個區間往右移0.5;第3個區間往左移0.5即可。

輸入樣例

4

1000

3000

05000

7000

10000

8000

9000

輸出樣例

1000
排序按右區間排,輸入的時候要處理一下,要乘以2,這樣結果是0.5的時候好算一些,因為兩個整數區間的移動不可能移動0.2,0.3這樣的。二分判斷函式要注意有的區間可以先不用。

#include

#include

#include

using

namespace std;

const

int n=

10000

;const

int inf=

0x3f3f3f3f

;struct nodes[n]

;int n;

bool

cmp(node a,node b)

intjudge

(int x)

,idx=0;

for(i=

0;idx<

20000

&&i=(j==i)

,j=i)

else

}return idx>=

20000;}

intmain()

sort

(s,s+n,cmp)

;int l=

0,r=

20000

;while

(l<=r)

else

} cout<2.0;

return0;

}

試題 歷屆試題 區間移位

1.把所有的區間左右端點讀入,並且端點都乘以2,也就是擴大兩倍,因為後面要二分答案,但是答案又會有0.5的小數字,二分的答案就會是擴大兩倍就會是整數,以便更好二分,只要最後答案 2就可以了 2.區間按右端點排序 3.開始二分答案,記最大移動距離為mid,記當前沒有被覆蓋的區間點 k 0,列舉所有的區...

歷屆試題 區間移位 藍橋杯 二分 貪心

time limit per test memory limit per test input output 1.5 seconds 256 megabytes standard input standard output description 數軸上有n個閉區間d1,dn。其中區間di用一對整數...

歷屆試題 區間移位

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