該題應採用二分法選取距離,否則可能會有超時的問題
每年奶牛們都要舉辦各種特殊版本的跳房子比賽,包括在河裡從乙個岩石跳到另乙個岩石。這項激動人心的活動在一條長長的筆直河道中進行,在起點和離起點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用兩分法去推求最長可能的最短跳躍距離。
最初,待求結果的可能範圍是[0,l]的全程區間,因此暫定取其半程(l,2),作為當前的最短跳躍距離,以這個標準進行岩石的篩選。
篩選過程是:
先以起點為基點,如果從基點到第1塊岩石的距離小於這個最短跳躍距離,則移除第1塊岩石,再看接下來那塊岩石(原序號是第2塊),如果還夠不上最小跳躍距離,就繼續移除。。。直至找到一塊距離基點超過最小跳躍距離的岩石,保留這塊岩石,並將它作為新的基點,再重複前面過程,逐一考察和移除在它之後的那些距離不足的岩石,直至找到下乙個基點予以保留。。。
當這個篩選過程最終結束時,那些倖存下來的基點,彼此之間的距離肯定是大於當前設定的最短跳躍距離的。
這個時候要看一下被移除岩石的總數:
#include
#include
#include
#include
#include
using
namespace std;
intassign
(int mid,
int d,
int n)
++mn;
}return n+
2-mn;
//起點和終點處的石頭未加入計數n
}int d[
50000];
intmain()
d[i]
= l;
int max = l, min =0;
int mid =
(max + min)/2
;int mn =
assign
(mid, d, n)
;while
(max >= min)
//不可 while (mn!=m) 第二組測試陣列會出現問題??可能是移走同樣數量的石頭,但移走的位置不同,會使最小距離也不同吧,這個理由對於下乙個問題可能同樣適用
cout << mid;
return0;
}
我的**用時大約是參考**的2倍,應該是因為移取岩石步驟太繁瑣,也可能是因為布林的返回值會用時更少??
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int base;
int top,mid;
int l,n,m;
int nodes[
50010];
bool
find
(int dis)}if
(num>n-m)
return
false;}
intmain()
nodes[n+1]
=l; base=1;
top=l;
int ans=0;
while
(base<=top)
else
} cout<}
河中跳房子
時間限制 1 sec 記憶體限制 128 mb 25 5 2211 1417 214 總時間限制 1000ms 記憶體限制 65536kb 描述每年奶牛們都要舉辦各種特殊版本的跳房子比賽,包括在河裡從乙個岩石跳到另乙個岩石。這項激動人心的活動在一條長長的筆直河道中進行,在起點和離起點l遠 1 l 1...
河中跳房子
時間限制 1000 ms 記憶體限制 65536 kb 提交數 485 通過數 227 每年奶牛們都要舉辦各種特殊版本的跳房子比賽,包括在河裡從乙個岩石跳到另乙個岩石。這項激動人心的活動在一條長長的筆直河道中進行,在起點和離起點l遠 1 l 1,000,000,000 的終點處均有乙個岩石。在起點和...
1247 河中跳房子
每年奶牛們都要舉辦各種特殊版本的跳房子比賽,包括在河裡從乙個岩石跳到另乙個岩石。這項激動人心的活動在一條長長的筆直河道中進行,在起點和離起點l遠 1 l 1,000,000,000 的終點處均有乙個岩石。在起點和終點之間,有n 0 n 50,000 個岩石,每個岩石與起點的距離分別為di 0 di ...