描述ファーマージョンはNで新しい長い納屋、(2 <= N <=10万)ストールを構築しました。ストールは、位置X1に直線に沿って位置しています...、XN(0 <= XI <=10億)。
彼のC(2 <= C <= N)牛が、この納屋のレイアウトが好きで、一度ストールに入れ互いに向かって積極的になることはありません。お互いを傷つけるから牛を防止するために、FJは、それらのいずれか2つの間の最小距離はできるだけ大きくなるように、ストールに牛を割り当てます。NおよびC:二つのスペースで区切られた整数:?何行目1 *输入最大の最小距離である
*行2..N + 1:I + 1ライン输出XI、整数ストールの場所が含まれています* 1行目:ワン整数:最大最小距離样例输入
5 3 1 2 8 4 9
サンプル出力
3
提示OUTPUT詳細:
FJは位置1,4および8にストールに彼の3頭の牛を置くことができ、3の最小距離をもたらす
巨大な入力データのscanfが推奨されます。
書式#include <iostreamの> の#include <アルゴリズム> 使用して 名前空間はstdを、 int型N、K。 INT [ 100000 + 5 ]、B [ 100000 + 5 ]。 INT楽しい(int型M) { int型 CNT = 0 。 一方、(M) { 場合(M%2)CNT ++ 。 M >> = 1 。 } 戻りCNT。 } int型の裁判官(int型M) { int型= CNT 1、TEMP = A [ 0 ]; // 最初の位置牛 用(INT I = 1 ; I <N - 、I ++は) { IF([I] -temp> = M) { TEMP = A [ I]; CNT ++ ; } } IF(CNT> = K)リターン 1。; 他 戻り 0 ; } ボイド)(解決 { int型の L = 0、A = R&LT [N- 1 ] -a [ 0 ]; //距离 一方(L <= R) { int型ミッド= 1 +(RL)/ 2 。 もし(裁判官(MID))L =ミッド+ 1 。 他に、R =半ば1 。 } COUT << -1- 1 << ENDL。 返します。 } int型のmain() { 一方(CIN >> N >> K) { ため(int型 i = 0 ; iがn <; iは++)CIN >> [I]。 ソート( +のN)。 解決する(); } リターン 0 ; }