結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
22252
|
| 提出日時 | 2025-03-30 18:33:01 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 68 ms / 5,000 ms |
| コード長 | 787 bytes |
| コンパイル時間 | 282 ms |
| コンパイル使用メモリ | 12,160 KB |
| 実行使用メモリ | 10,624 KB |
| 最終ジャッジ日時 | 2025-03-30 18:33:05 |
| 合計ジャッジ時間 | 3,130 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
from collections import deque
def popcount(x):
return bin(x).count('1')
def shortest_moves(N):
# 最短移動数を格納するDPテーブル(未訪問は-1)
dp = [-1] * (N + 1)
dp[1] = 1 # 開始のマスも移動にカウントする
queue = deque([1])
while queue:
current = queue.popleft()
step = popcount(current)
# 次の候補マス
for next_pos in [current - step, current + step]:
if 1 <= next_pos <= N and dp[next_pos] == -1:
dp[next_pos] = dp[current] + 1
queue.append(next_pos)
# print(current, next_pos, queue, list(queue), dp)
return dp[N]
# 入力受付と実行
if __name__ == "__main__":
N = int(input())
print(shortest_moves(N))
22252