このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について意訳で説明する。
ジョニーは64センチメートルの棒を持っていて、これをxセンチメートルにすれば棒を使った遊びがもっとたのしくなるであろうと考えた。ジョニーは元の棒を小さい棒に分け、ちょうどxセンチメートルになるようにそれらをくっつけることにした。棒を分割するもっとも単純な方法は半分に分けることなので、ジョニーは以下の手順を利用することにする。
- 全部の棒の長さの総和を取る。これがxよりも大きいうちは次の手順を取る。
- 一番短い長さの棒を半分にする
- もし半分にしたものの一つを捨てても、残りの棒の長さがxを下回らないようであれば、それを捨てる。
- 最後に、ちょうどxセンチメートルの棒になるように、残った棒をくっつけていく。
私の解答はこちら。
public class Stick { public int pieces(int x) { int ret = 0; while( x > 0){ ret += x % 2; x /= 2; } return ret; } }
得点は204.91/250、1回のsubmitでシステムテストクリア。
0 件のコメント:
コメントを投稿