結果
| 問題 | No.3 ビットすごろく | 
| コンテスト | |
| ユーザー |  human_cipher | 
| 提出日時 | 2021-06-15 01:43:01 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 46 ms / 5,000 ms | 
| コード長 | 825 bytes | 
| コンパイル時間 | 97 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 13,952 KB | 
| 最終ジャッジ日時 | 2024-12-25 14:53:53 | 
| 合計ジャッジ時間 | 2,334 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 33 | 
ソースコード
from collections import Counter
from collections import deque
def hw(s):
    return bin(s).count("1")
def solve(n):
    G = [set() for _ in range(n+1)] #G[i]:i番目のマスからいけるマス
    for i in range(1,n+1):
        hwi = hw(i)
        if 1 <= i - hwi <= n:
            G[i].add(i-hwi)
        if 1 <= i + hwi <= n:
            G[i].add(i+hwi)
    INF = 10**8
    D = [INF for _ in range(n+1)] #D[i]:マス1からの最短距離
    DQ = deque()
    DQ.append(1)
    D[1] = 1
    while len(DQ) > 0:
        now = DQ.popleft()
        for nx in G[now]:
            if D[nx] == INF:
                D[nx] = D[now] + 1
                DQ.append(nx)
    if D[n] != INF:
        return D[n]
    else:
        return -1
def main():
    n = int(input())
    print(solve(n))
if __name__ == "__main__":
    main()
            
            
            
        