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注意 穩定性是排序方法本身的特性,與資料無關,換句話說,一種排序方法如果是穩定的,則對所有的資料序列都是穩定的,反過來,如果在一組資料上出現不...