結果
問題 | No.3 ビットすごろく |
ユーザー | tnoda_ |
提出日時 | 2015-02-04 20:04:21 |
言語 | Go (1.22.1) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 993 bytes |
コンパイル時間 | 14,564 ms |
コンパイル使用メモリ | 226,512 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-01 07:12:13 |
合計ジャッジ時間 | 15,653 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 1 ms
6,812 KB |
testcase_02 | AC | 1 ms
6,812 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 1 ms
6,944 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 1 ms
6,940 KB |
testcase_07 | AC | 1 ms
6,940 KB |
testcase_08 | AC | 2 ms
6,944 KB |
testcase_09 | AC | 2 ms
6,940 KB |
testcase_10 | AC | 1 ms
6,940 KB |
testcase_11 | AC | 1 ms
6,940 KB |
testcase_12 | AC | 1 ms
6,944 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,940 KB |
testcase_15 | AC | 1 ms
6,944 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 2 ms
6,940 KB |
testcase_18 | AC | 2 ms
6,940 KB |
testcase_19 | AC | 2 ms
6,940 KB |
testcase_20 | AC | 1 ms
6,940 KB |
testcase_21 | AC | 1 ms
6,940 KB |
testcase_22 | AC | 2 ms
6,940 KB |
testcase_23 | AC | 2 ms
6,940 KB |
testcase_24 | AC | 2 ms
6,944 KB |
testcase_25 | AC | 2 ms
6,940 KB |
testcase_26 | AC | 1 ms
6,940 KB |
testcase_27 | AC | 1 ms
6,944 KB |
testcase_28 | AC | 2 ms
6,940 KB |
testcase_29 | AC | 2 ms
6,940 KB |
testcase_30 | AC | 1 ms
6,940 KB |
testcase_31 | AC | 1 ms
6,940 KB |
testcase_32 | AC | 1 ms
6,944 KB |
ソースコード
package main import "fmt" type intQueue []int func newIntQueue(size int) *intQueue { q := make(intQueue, 0, size) return &q } func (q *intQueue) Len() int { return len(*q) } func (q *intQueue) Empty() bool { return q.Len() == 0 } func (q *intQueue) Push(x int) { *q = append(*q, x) } func (q *intQueue) Peek() int { return (*q)[0] } func (q *intQueue) Pop() int { z := (*q)[0] *q = (*q)[1:] return z } func d(x int) (z int) { for x > 0 { z += x & 1 x >>= 1 } return } func min(x, y int) int { if y < x { return y } return x } func main() { Inf := 1 << 28 var N int fmt.Scan(&N) dp := make([]int, N+1) for i := 0; i <= N; i++ { dp[i] = Inf } dp[1] = 1 q := newIntQueue(N) q.Push(1) for !q.Empty() { x := q.Pop() dx := d(x) if x-dx > 1 && dp[x-dx] == Inf { dp[x-dx] = dp[x] + 1 q.Push(x - dx) } if x+dx <= N && dp[x+dx] == Inf { dp[x+dx] = dp[x] + 1 q.Push(x + dx) } } if dp[N] == Inf { dp[N] = -1 } fmt.Println(dp[N]) }