簡單來說,就是在一段有n個可以開設站台的位置上,選取其中的m個,使得每兩個站台之間的最小距離取得最大值。
也就是說,你要讓這m個站台中,每兩個站台之間的距離都盡可能大。
因為題目要求輸出最短位置,我們就把最短距離拿來二分!
1.我們需要乙個函式ok來計算以l為最短距離能夠開設多少家店。
函式構造是基本二分bool型別的乙個常用函式:
boolok(
int x)
} last=i;
tmp++;}
return tmp>=m;
}
通過tmp和last這兩個臨時變數來儲存我們的資料,並且判斷a[i]-a[last]是否如果小於,就一直while
if
(i>n)
這個if就不用我多說了吧,(老二分都懂 )
通過i作為列舉邊界,並每次與n作比較
並且當i>n時,就return成功了
last再每次記錄i的數值,簡單來說就是個i-1;
所以每次迴圈後,我們的「答案記錄器」——tmp也要++;
main函式的主要構成呢,也就是由輸入、輸出、二分來構成的;
int l=
0,r=a[n]
-a[1];
while
(r-l>1)
else
}
每次通過二分來縮小範圍,來減少我們的程式用時,避免超時,也讓我們淘汰了雙重for迴圈這種老版的不動腦的暴力搜尋了。
#include
using
namespace std;
int n,m;
int a[
100010];
boolok(
int x)
} last=i;
tmp++;}
return tmp>=m;
}int
main()
sort
(a+1
,a+1
+n);
int l=
0,r=a[n]
-a[1];
while
(r-l>1)
else}if
(!ok(r)
)printf
("%d"
,r);
return0;
}
bye~~~
說個題外話,今天是8月24號,科比兩個球衣號碼紀念日,也在這通過csdn 這個破軟體 來表達對籃球之神科比逝世的懷念。
火車站臺問題
今天流利說筆試火車站臺問題,很簡單的問題,但是我二十分鐘沒做出來,其中遇到了兩個bug,參考迭代器iterator在遍歷時能remove但是不能往集合裡新增元素問題 list集合根據索引刪除資料時用另乙個list集合的資料當索引操作失敗問題即list.remove list1.get index 這...
火車站 題解
題目傳送門 有乙個奇奇怪怪的火車站,奇奇怪怪的站長jtz想要解決乙個奇奇怪怪的問題。現在有 n 列火車要進出站,對於同一列車進站和出站有且只有一次鳴笛,笛聲有 1 m 種音調,要求相鄰的兩次鳴笛之間音調的差的絕對值不能小於 k 不鳴笛笛聲音調看作 1e100 不然耳朵不好的車站管理員xyh分不清楚是...
描寫火車站場景 關於描寫火車站的句子
關於描寫火車站的句子 關於描寫火車站的句子 所以至今,我仍很愛乘火車,臥鋪,靠在枕頭上看書,沉沉 睡去,聽鐵軌一層一層的蕩漾,在記憶中昏暗地穿行,如果我愛 誰,我們一定會乘火車去很遠的地方,一路都是風景,包括思考 時呈現出來的風景。有時候站在路邊看著人來人往,會覺得城市比沙漠還要荒涼。每個人都靠的那...