結果

問題 No.3 ビットすごろく
ユーザー simansiman
提出日時 2015-04-03 00:09:03
言語 Ruby
(3.3.0)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 785 bytes
コンパイル時間 115 ms
コンパイル使用メモリ 7,680 KB
実行使用メモリ 12,544 KB
最終ジャッジ日時 2024-07-01 07:18:53
合計ジャッジ時間 4,160 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 RE -
testcase_01 RE -
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 RE -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 RE -
testcase_21 RE -
testcase_22 RE -
testcase_23 RE -
testcase_24 RE -
testcase_25 RE -
testcase_26 RE -
testcase_27 RE -
testcase_28 RE -
testcase_29 RE -
testcase_30 RE -
testcase_31 RE -
testcase_32 RE -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

class Fixnum
  def bitcount
    self.to_s(2).chars.count('1')
  end
end

class Yukicoder
  UNKNOWN = -1

  def initialize
    n = gets.chomp.to_i

    check_list = Hash.new(UNKNOWN)
    check_list[1] = 1
    dist = 2
    states = [1]

    while states.any?
      next_states = []

      states.each do |s|
        move_dist = s.bitcount
        a = s - move_dist
        b = s + move_dist

        if a >= 1 && check_list[a] == UNKNOWN
          check_list[s - move_dist] = dist
          next_states << s - move_dist
        end

        if b <= n && check_list[b] == UNKNOWN
          check_list[s + move_dist] = dist
          next_states << s + move_dist
        end
      end

      states = next_states.dup
      dist += 1
    end

    puts check_list[n]
  end
end

Yukicoder.new
0