結果
| 問題 | No.3 ビットすごろく | 
| コンテスト | |
| ユーザー |  scaler | 
| 提出日時 | 2024-08-31 11:30:25 | 
| 言語 | Scala(Beta) (3.6.2) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 958 ms / 5,000 ms | 
| コード長 | 728 bytes | 
| コンパイル時間 | 12,866 ms | 
| コンパイル使用メモリ | 267,000 KB | 
| 実行使用メモリ | 65,400 KB | 
| 最終ジャッジ日時 | 2024-08-31 11:31:12 | 
| 合計ジャッジ時間 | 41,508 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 33 | 
ソースコード
import scala.io.StdIn.readLine
import scala.collection.mutable.Queue
@main
def yuki3(): Unit =
  val N = readLine().split(" ").map(_.toInt).head
  val dist: Array[Int] = Array.ofDim[Int](10001)
  val visited: Array[Boolean] = Array.ofDim[Boolean](10001)
  var q = Queue[Int](1)
  visited(1) = true
  while q.nonEmpty do
    val x = q.dequeue
    var p = 0
    var num = x
    while num != 0 do
      p += num & 1
      num >>= 1
    if x + p <= N && !visited(x + p) then
      visited(x + p) = true
      dist(x + p) = dist(x) + 1
      q.enqueue(x + p)
    if x - p > 0 && !visited(x - p) then
      visited(x - p) = true
      dist(x - p) = dist(x) + 1
      q.enqueue(x - p)
  println(if visited(N) then dist(N) + 1 else -1)
            
            
            
        