Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CutSticks.pdf

mizti
April 07, 2013
600

 CutSticks.pdf

mizti

April 07, 2013
Tweet

Transcript

  1. 問題 • 入力: int sticks[], int CutTimes, int Rank •

    たかしくんはn本の棒を与えられ、 それぞれの棒の長さはsticks[]で表されます。 • たかしくんはCutTimes回以下の任意の回数だけ 以下を繰り返します – 任意の棒を一本選びます – その棒を2つに切断します (小数長さになることもあります) • 例: sticks [3, 4, 5] から2番目の棒を取り出して 1と3の長さに切り分けます [3, 4, 5] -> [3, 1, 3, 5] TopCoder SRM481 Div2 Level3より改題 CutTimes < 109 Rank < 109 (ただし最終的な棒の数を超えない) sticksの要素数 < 50 各stickの長さ < 109 条件:
  2. 問題 棒の切断方法はたかしくんの自由です。 たかしくんがもらえる最も長い棒の長さを求めま しょう。 •上記を繰り返したあと、棒を長いほうから順に並べ、 Rank番目の長さの棒を取得します 5 3 3 1

    たかし たかしくんが 序列三位の弟子の場合 CutTimes < 109 Rank < 109 (ただし最終的な棒の数を超えない) sticksの要素数 < 50 各stickの長さ < 109 条件:
  3. サンプル入出力 sticks={5,8} CutTimes=1 Rank=1 => 8.0 sticks={5,8} CutTimes=1 Rank=2 =>

    5.0 sticks={5,8} CutTimes=1 Rank=3 => 4.0 sticks={1000000000, 1000000000, 1} CutTimes=2 Rank=5 => 1.0 sticks={ 76,594,17,6984,26,57,9, 876,5816,73,969,527,49 } CutTimes=789 Rank=459 => 34.92 出力は小数点以下2桁まであってればOK
  4. 解答例 ある長さxで sticksからxより 長い棒を Rank本以上作 れるかどうか パーツ1: • sticks内にx以上の長さの ものがRank本以上ある?

    ある ない まだ切る回 数はある? ない 長さxでRank本 以上作れる! 長さxではRank 本作れない! ある 切る回数を1減らし て、2 * xより長い棒 からxを切り出せ る? 切り 出せる 切り出 せない ※上記はCut数ベースで回していますが、本数ベースで「この棒からxはいくつ切り出 せるか」カウントしていったほうが良いかもしれません
  5. 解答例 パーツ1とパーツ2を組み合わせる: 0 と 10億の中間 (=5億)をxとして ある長さxでsticksからxより長い棒を Rank本以上作れるかどうか 作れる! 作れない!

    限界は5億より大きい! もっと大きく5億と10億の 中間(=7.5億)をxとして ある長さxでsticksからxより長い棒を Rank本以上作れるかどうか 限界は5億より小さい! もっと小さく0と5億の 中間(=2.5億)をxとして ある長さxでsticksからxより長い棒を Rank本以上作れるかどうか 作れる! 作れない! 作れる! 作れない! 1 0 0 回 繰 り 返 す