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

CutSticks.pdf

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for mizti mizti
April 07, 2013
640

 CutSticks.pdf

Avatar for mizti

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 回 繰 り 返 す