変なタイトルですが、こんな問題です。

パイプを切り出そう

n 本のパイプがあり、長さはそれぞれ A_1, A_2, …, A_n です。今、n 本のパイプから k 本の同じ長さのパイプを切り出すことを考えます。パイプを切って分割することはできますが、つなげることはできません。

パイプの切り方を工夫した結果、切り出すことができるパイプの長さの最大値を答えてください。

答えは整数になるとは限りません。相対誤差または絶対誤差が 10^-6 (0.000001) 以下であれば正解とみなされます。

パイプを分割する問題

二分探索法でパイプの長さの最大値と最小値を狭めていきます。差が0.000001以下になるまで二分探索を繰り返して解を求めます。

切れ目で分割する問題

太巻きを分けよう (おなかペコペコ)

長さ L [cm] の太巻きがあり、これを n 人で分けようとしています。太巻きにはあらかじめ k 個の切れ目が入っており、i 個目の切れ目は左端から A_i [cm] のところに入っています。あなたは、切れ目を n-1 個選んでそこで切ることにより、太巻きを n 分割しようとしています。

切れ目の選び方を工夫したとき、最も短い太巻きの長さを最大でいくつにできるかを答えてください。

解として考えられる最大値は L であり、最小値は0です。そこで left は0、right を L で初期化します。そのあと left と right の中間の値 mid を求め、その長さで太巻きを n 個にわけることができるか調べます。できるのであれば left に mid を代入し、できない場合は right に mid を代入します。これを left と right の差が1以下になるまで繰り返します。

切れ目で分割する問題(別パターン)

太巻きを分けよう (おなかいっぱい)

長さ L [cm] の太巻きがあり、これを n 人で分けようとしています。太巻きにはあらかじめ k 個の切れ目が入っており、i 個目の切れ目は左端から A_i [cm] のところに入っています。あなたは、切れ目を n-1 個選んでそこで切ることにより、太巻きを n 分割しようとしています。

切れ目の選び方を工夫したとき、最も長い太巻きの長さを最小でいくつにできるかを答えてください。

前回と似た問題です。前回はもっとも短いものの最大値を求めましたが、今回はもっとも長いものの最小値を求めます。

今度は切り分けた太巻きの長さが mid を超えないようにするのですが、切り分けた太巻きの長さが mid を超えたら単純にcountをインクリメントして次扱いするだけでは不十分です。「切れ目と切れ目のあいだが mid を超えている場合はどうやってもできない」ということを見落とさないようにしなければなりません(これに気づかず誤答を連発してしまった)。