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

2021-10-03 11:47:21 字數 3250 閱讀 2586

time limit per test

memory limit per test

input

output

1.5 seconds

256 megabytes

standard input

standard output

description:

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

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

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

input

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

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

one output

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

one example input

2

10 5010

4980 9980

two example output

two example input

4

0 4000

3000 5000

5001 8000

7000 10000

example output

0.5

hit

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

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

對於30%的評測用例,1 ≤ n ≤ 10;

對於100%的評測用例,1 ≤ n ≤ 10000,0 ≤ ai < bi≤ 10000。

分析:

題意:

n

nn個區間,若假定乙個c

ic_i

ci​,表示第ith

i_it

h​區間的左右邊界可以擴充套件至[ai+

ci,b

i+ci

]a_i+c_i, b_i+c_i]

ai​+ci

​,bi

​+ci

​], 要使得所有區間的並可以覆蓋數軸[0,

10000

][0,10000]

[0,100

00](原來一開始理解錯了啊)問max

(ci)

max(c_i)

max(ci

​)的最小值是多少

做法:

應該很容易可以想到要用二分,只是問題在於如何che

ck

check

chec

k是否可以

u mm

ummum

m參考了別人的部落格 (菜是原罪) ,這裡加一下自己的理解,區間移位

先對原區間進行排序,優先將右端點公升序排序,若右端點相等將左端點公升序排序

之後遍歷每乙個區間

在遍歷ith

i_it

h​區間時, 可以求出從左往右第乙個符合條件(即還沒有計算過且可以被覆蓋的)的下標

然後更新到目前為止最遠可以覆蓋到的右端點,即以下**中的ans

ansan

s要注意到的是,因為上乙個區間如果可以被覆蓋,那麼前面所有被覆蓋的應該都是連續的

也就是說相當於前面所有區間變成一塊大區間,因此可以直接更新最右端點可以覆蓋到的

如果最終可以到達的右端點ans

>

=10000

ans >= 10000

ans>=1

0000

,說明二分得到的數還有可能繼續減小

code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int maxn =

1e4+5;

const

int inf =

0x3f3f3f3f

;struct node

}p[maxn]

;bool vis[maxn]

;bool check

(double x,

int n)

return ans >=

10000;}

intmain()

sort

(p +

1, p +

1+ n)

;int l =

0, r =

100000

, mid;

while

(l < r)

if(l %10)

printf

("%.1f\n"

, l *

0.1)

;else

printf

("%d\n",(

int)

(l*0.1))

;return0;

}

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

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

藍橋杯 試題 歷屆試題 連號區間數

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

藍橋杯 歷屆試題 連號區間數

問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案...