川ホップスコッチ(2点)

毎年、牛は慎重に川で岩に岩から飛び降り含ま石蹴りの独特なバージョンをフィーチャーしたイベントを開催します。興奮は、開始時のロックと終わりに、別の岩と長く、真っ直ぐな川で行わ  Lの  離れ開始から単位(1≤  Lの  ≤10億)。開始および終了岩の間の川に沿って、  N  (0≤  N  50,000≤)以上の岩石は、一体距離でそれぞれ、現れる  D iが  開始(0 <から  D iが  <  L)。

ゲームをプレイするには、順番にそれぞれの牛が始まる岩から始まり、岩から岩へジャンプだけ、エンディング岩でフィニッシュに到達しようとします。もちろん、あまり機敏牛は川に代わり終わる、最終岩にそれを作ることはありません。

ファーマージョンは彼の牛の誇りに思っていると、毎年このイベントを監視します。時間が経つにつれてしかし、他の農家の臆病な牛を見ての彼のタイヤは、一緒にあまりにも密接に置かれた岩の間に短い距離間でぐったり。彼は、牛が最後に到達するためにジャンプする必要があります最短距離を増加させるためにいくつかの岩を削除することを計画しています。彼は開始と終了の岩を削除することはできません知っているが、彼は彼が最大削除するために十分なリソースを持っていることを算出し、  Mの 岩(0≤  M  ≤  N)。

FJは、彼が最短距離を増やすことができます正確にどのくらい知りたい  *前*  彼は岩の除去を開始します。ファーマージョンは牛が最適なセット削除した後にジャンプすることがある可能な限り最大の最短距離を判断するのに役立ち  Mの  岩を。

 

エントリー

1行目:スリースペースで区切られた整数:  L、  N、および  M 
行2 .. N +1:各行は、いくつかの岩が離れて出発岩からどのくらい離れているかを示す一つの整数が含まれています。どの2つの岩が同じ位置を共有しません。

輸出

行1:牛は、除去した後にジャンプしなければならない最短距離の最大値である単一の整数  Mの  岩

サンプル入力

 

5 2 25
2
14
11
21
17

サンプル出力

4

 

プロンプト

任意岩を除去する前に、短いジャンプが0~2(開始)から2のジャンプは2と14で石を除去した後であった、最短必要なジャンプが4(17から21まで又は21から25へのジャンプがあります)。
 
より多くの二分法の対象は、気持ちを見つけるだろうか
 
1つの#include <iostreamの>
 2の#include <CStringの>
 3。の#include <アルゴリズム>
 4。 使用した 名前空間STD;
 5のtypedef ロング ロングLL;
 6  LLのL、N、M;
 7 LL ARR [ 50005 ];
 8  
9。 BOOLのチェック(LL MID){ /// 数投げるまでの最短距離と実際のスローとの比較の数半分
10      LL NUM = 0、SUM = 0 ;
 。11      ためINT I = 1。 ;私は= N + < 1 ; Iを++ ){
 12         ARR = + [I] SUM - ARR [I- 1 ];
 13である //         IF(SUM <= MID)NUM ++;    // この距離に除去するために
14          IF(SUM <MID)NUM ++を15  /// 例えば過酢酸など、このそれは、加算合計と一致している前に、石満たす他の人が彼の表情の後に延期
16を         {
 。17              合計= 0 ;
 18である         }
 19。     }
 20がある //     NUMを返す; <= Mが
21である     リターン NUM> ; M
 22です }
 23は、 
24  LLバイナリ(LL左、右LL){
 25      ; LL ANS    /// 最短距離の除去である
26     一方(左<= 右){
 27          LLミッド=左+右>> 1 28          もし右=ミッド((MID)をチェックしてください)1/// 移除多了
29          他に左=ミッド+ 1、ANS = ミッド;
30      }
 31の     リターンANS。
32  }
 33  
34  INT メイン(){
 35の      IOS :: sync_with_stdio()。
36      CIN >> L >> N >> M。
37      LL MAXX = 0 38の      ARR [ 0 ] =0 ;
 39      INT I = 1。 ;私は= N <; Iは++)CIN >> ARRは、[I]は、
 40      ARR [N + 1 ] = L;
 41である      ソート(ARR + 1、ARR + N + 1 + 1 );
 42である      COUTバイナリ<<(1、ARR [Nの+ 1 ])<< ENDLは;   // 先頭からの最短距離
43は、     戻り 0 ;
 44です }
コードの表示

 

おすすめ

転載: www.cnblogs.com/qq-1585047819/p/11260788.html