跳石頭(二分法) 3 洛谷

2021-10-16 05:27:17 字數 971 閱讀 4244

這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 n 塊岩石(不含起點和終點的岩石)。在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。

為了提高比賽難度,組委會計畫移走一些岩石,使得選手們在比賽過程中的最短跳躍距離盡可能長。由於預算限制,組委會至多從起點和終點之間移走 m 塊岩石(不能移走起點和終點的岩石)。

輸入格式:

第一行包含三個整數 l,n,m,分別表示起點到終點的距離,起點和終點之間的岩石數,以及組委會至多移走的岩石數。接下來 每行乙個整數,第 i行的整數 di( 0 < d_i < l),表示第 i 塊岩石與起點的距離。這些岩石按與起點距離從小到大的順序給出,且不會有兩個岩石出現在同乙個位置。

輸出格式:

乙個整數,即最短跳躍距離的最大值。

最優解問題,考慮動態規劃,列舉搜尋,二分,貪心。但由於本題的資料過大,直接列舉搜尋必然超時,同時動態規劃不好進行狀態的記錄,故考慮二分和貪心。觀察到所求為最小值中的最大值,即如果二分的話應該往高的方向逼近,並且題目給定了最大值l,即二分法中的邊界r,所求最短距離的最大值具有單調性,即如果當前m在移動岩石數不多於m的時候不滿足最短跳躍距離,那麼比m大的答案也都將不滿足,故可用二分求解。

#include

using

namespace std;

int a[

100005];

int l,n,m;

bool

judge

(int m)

//m是否滿足跳躍的最短距離

intmain()

cout

}

題目鏈結

同型別題:

洛谷:一元三次方程求解、路標設定。

計蒜客:切繩子、尋找段落。

洛谷2678 跳石頭 二分驗證

題目背景 一年一度的 跳石頭 比賽又要開始了 題目描述 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 n 塊岩石 不含起點和終 點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達 終點。為了提高...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...