結果
| 問題 | 
                            No.3 ビットすごろく
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2019-07-08 22:29:30 | 
| 言語 | Ruby  (3.4.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 96 ms / 5,000 ms | 
| コード長 | 625 bytes | 
| コンパイル時間 | 90 ms | 
| コンパイル使用メモリ | 7,680 KB | 
| 実行使用メモリ | 12,288 KB | 
| 最終ジャッジ日時 | 2024-07-01 09:24:15 | 
| 合計ジャッジ時間 | 4,289 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 33 | 
コンパイルメッセージ
Syntax OK
ソースコード
def bit_count(n)
  cnt = 0
  while 0 < n
    n &= n-1
    cnt += 1
  end
  cnt
end
def main
  n = gets.to_i
  dp = Array.new(n + 1, -1)
  dp[0] = 0
  dp[1] = 1
  candidates = [1]
  while !candidates.empty?
    candidate = candidates.shift
    break if candidate == n
    step = bit_count(candidate)
    if step < candidate && dp[candidate - step] < 0
      dp[candidate - step] = dp[candidate] + 1
      candidates << candidate - step
    end
    if step + candidate <= n && dp[candidate + step] < 0
      dp[candidate + step] = dp[candidate] + 1
      candidates << candidate + step
    end
  end
  dp[n]
end
puts main