第七章 分治演算法 1247 河中跳房子

2021-10-04 21:50:59 字數 1300 閱讀 5673

1247:河中跳房子

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 3563 通過數: 1622

【題目描述】

每年奶牛們都要舉辦各種特殊版本的跳房子比賽,包括在河裡從乙個岩石跳到另乙個岩石。這項激動人心的活動在一條長長的筆直河道中進行,在起點和離起點l遠 (1 ≤ l≤ 1,000,000,000) 的終點處均有乙個岩石。在起點和終點之間,有n (0 ≤ n ≤ 50,000) 個岩石,每個岩石與起點的距離分別為di (0 < di < l)。

在比賽過程中,奶牛輪流從起點出發,嘗試到達終點,每一步只能從乙個岩石跳到另乙個岩石。當然,實力不濟的奶牛是沒有辦法完成目標的。

農夫約翰為他的奶牛們感到自豪並且年年都**了這項比賽。但隨著時間的推移,看著其他農夫的膽小奶牛們在相距很近的岩石之間緩慢前行,他感到非常厭煩。他計畫移走一些岩石,使得從起點到終點的過程中,最短的跳躍距離最長。他可以移走除起點和終點外的至多m (0 ≤ m ≤ n) 個岩石。

請幫助約翰確定移走這些岩石後,最長可能的最短跳躍距離是多少?

【輸入】

第一行包含三個整數l, n, m,相鄰兩個整數之間用單個空格隔開。

接下來n行,每行乙個整數,表示每個岩石與起點的距離。岩石按與起點距離從近到遠給出,且不會有兩個岩石出現在同乙個位置。

【輸出】

乙個整數,最長可能的最短跳躍距離。

【輸入樣例】

25 5 2211

1417

21【輸出樣例】

4【提示】

在移除位於2和14的兩個岩石之後,最短跳躍距離為4(從17到21或從21到25)。

思路:可以採用二分答案的方法。最短距離最大,其實就是越大越好——在二分的時候,如果中間值可行,繼續猜後一半,而不是前一半,因為後一半可能有更好的!對於乙個答案m,如果可行,那麼相鄰石頭之間的距離都不小於m,也就是如果出現小於m的,那個石頭必須移走。寫乙個函式判斷當前答案需要移走多少塊石頭,如果不超過k塊,那就可以,否則不行。

#include

#include

#include

using

namespace std;

int l, n,m, a[

50010

],ans;

intcheck

(int mid)

return x;

}int

main()

else right = mid -1;

}printf

("%d"

,ans)

;return0;

}

第七章 分治演算法1246 膨脹的木棍

1246 膨脹的木棍 時間限制 1000 ms 記憶體限制 65536 kb 提交數 2257 通過數 686 題目描述 當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l 1 n c l,其中c是熱膨脹係數。當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未...

第七章 分治演算法 1243 月度開銷

1243 月度開銷 時間限制 1000 ms 記憶體限制 65536 kb 提交數 5287 通過數 1850 題目描述 農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m ...

演算法導論 第七章 排序

什麼是穩定排序?n個記錄的序列為 r1,r2,r3 rn 其相應的鍵值序列為 k1,k2,k3 kn 假設ki kj,若在排序前的序列中ri在rj之前,即 i注意 穩定性是排序方法本身的特性,與資料無關,換句話說,一種排序方法如果是穩定的,則對所有的資料序列都是穩定的,反過來,如果在一組資料上出現不...