2654 最小距離最大

2022-04-10 08:57:20 字數 1244 閱讀 7989

問題

給出n個位置(數軸上的座標值),從中選出k個,讓這k個位置相鄰兩個之間的距離(相鄰位置座標的差值)盡可能的大(盡可能大的意思是這k-1個距離的最小值盡量大)。輸出這個最大的最小值。

樣例解釋

選位置:1 5 9。

輸入

第一行:2個數n和k(2 <= n <= 100000, 2 <= k <= 10000, k <= n)

後面n行:每行乙個數pi,表示具體位置(0 <= pi <= 10^9),位置是無序的。

輸出

輸出乙個數,對應最大的距離。

輸入樣例

5 3135

79輸出樣例

4

這個題目是乙個經典的二分答案題。(當看到題目中有問最大的最小值,一般就是二分答案題目了)

二分答案首先要明白我們要二分的資料,這裡,我們可以選擇二分這個最大距離。

知道了要二分的資料,就可以寫check函式了,我們現在main函式中對資料進行排序,從頭開始,每隔大於等於mid距離就統計一次,到最後看一看是否滿足k個位置,如果滿足,就把mid值調大(因為要求最大的最小值),如果不滿足,就調小。

bingo,問題解決。

二分答案有乙個特點,就是思路簡單,**難寫,正和dp相反。

下面我就先放出核心**(check函式)

bool check(intx)

}return cnt>=k;

}

其實看一看也沒有多難。

下面是全部**:

1 #include2 #include3 #include4 #include5 #include6 #define inf 100000000

7 using namespacestd;

8 int a[100000],n,k;

9 bool check(intx)

10 19 }

20 return cnt>=k;

21 }

22 intmain()

23 29 intl,r,m;

30 sort(a+1,a+1+n);

31 l=0,r=1e9+1;

32 while(l)

33 40 cout<41 return 0;

42 }

2654 最小距離最大

題目描述 給出n個位置 數軸上的座標值 從中選出k個,讓這k個位置相鄰兩個之間的距離 相鄰位置座標的差值 盡可能的大 盡可能大的意思是這k 1個距離的最小值盡量大 輸出這個最大的最小值。樣例解釋 選位置 1 5 9。輸入 第一行 2個數n和k 2 n 100000,2 k 10000,k n 後面n...

最小距離最大值問題

def check2 a,m,x k,c 0,0 for i in range 1,len a if a i a k x 當前距離小於x,刪除元素a i c 1 else 當前距離不小於x,更新左邊界 k i return c m def distance a,m left,right,ans 1,...

聚類分析 最大最小距離法練習

資料集 0 00 1 4 44 5 5 45 5 1 0 用最大最小距離法進行聚類分析 from fileutil import fileutil from mathutil import mathutil import math x fileutil.openfile 2 1.txt 資料 z 聚...