以下は、上記のOJを介して被験者のためのコードであります
・例:
件名の説明:
ファーマージョンはN(2≤N≤10万)のコンパートメントを含む、長い囲いを構築し、これらのキュービクルは、X1、...、XN(10億≤0≤XI)を番号が付けられている。しかし、ジョン室内でのC(2≤C≤N)レイアウトを好きではない牛、家畜の数頭は、彼らが起こるように戦います。牛を維持するためには、お互いを傷つけます。ジョンは、牛にできるだけ大きい任意の二つの牛の間の最小距離を独自の区画を割り当てることを決め、その後、最大最小距離は何であります
コードの実装:
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <アルゴリズム> 4 5 使用 名前空間STD。 6 7 のconst int型 N = 1E5 + 3 。 8 INTがN、M、X [N]。 9 10インラインブールチェック(INT D) 11 { 12 のint牛= 1 。 13 int型 RGT = X [ 1 ] + D。 14 のために(int型 I = 2 ; iが<= N; ++ I) 15 { 16 であれば(X [i]が<RGT)続けます。 17 ++ 牛。 18 RGT = X [i]が+ D。 19 } 20 リターン牛> = M。 21 } 22 23 のint main()の 24 { 25 のscanf(" %D%dの"、&N、&M)。 26 のために(int型 i = 1 ; iが<= N; ++ I) 27 のscanf(" %dの"、およびX [I])。 28 ソート(X + 1、X + N + 1 )。 29 INTは L = 0、R = X [N] -x [ 1 ]。 30 一方(L <= r)は 31 { 32 INTミッド= L + R >> 1 。 33 であれば(チェック(MID))L =ミッド+ 1 。 34 他 R =半ば1 。 35 } 36 のprintf(" %d個の\ n " 、R)。 37 リターン 0 。 38 }
・例二
件名の説明:
正の整数Aの列の長さnを考えます L配列以上の最大平均長を求めます。
コードの実装:
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <CStringの> 4の#include <アルゴリズム> 5 6 使用して 名前空間STD。 7 8 ダブル [ 100001 ]、B [ 100001 ]和[ 100001 ]。 9 10 のint main()の 11 { 12 INT N、L。 13 のscanf(" %d個の%のD "、&N、&L)。 14 のために(int型 I = 1のscanf(++ iは; iが= Nを<)」%のLF 」、および[I]); 15 二重 EPS = 1E- 5 ; 16 ダブル L = -1e6、R = 1E6; 17 ながら(RL> EPS) 18 { 19 ダブルミッド=(L + R)/ 2 。 20 のために(int型 i = 1 ; iが= Nを<; ++ I)B [i]は[I] = - 半ば、 21 のために(int型 i = 1 ; iが= Nを<; ++ I)の和[I] =和[I- 1 ] + B [i]は、 22の ダブル ANS = - 1E10; 23 ダブルmin_val = 1E10; 24 のためには、(int型 iはL =、iは= Nを<; ++ I) 25 { 26 min_val =分(min_val、和[I- L])。 27の ANS = MAX(ANS、和[I] - min_val)。 28 } 29 であれば(ANS> = 0)、L = ミッド。 30 他の R = ミッド; 31 } 32 のprintf(" %dの"、INT(R * 1000 ))。 33 リターン 0 ; 34 }