積極的な牛(USACO 2005年2月ゴールド)(バイナリサーチ)

描述ファーマージョンは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 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/Shallow-dream/p/11420640.html