問題
給出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 1000000007 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 聚...