結果
問題 | No.3 ビットすごろく |
ユーザー | ryosuke0825 |
提出日時 | 2018-08-16 22:02:08 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 36 ms / 5,000 ms |
コード長 | 1,361 bytes |
コンパイル時間 | 100 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 11,520 KB |
最終ジャッジ日時 | 2024-07-01 09:04:48 |
合計ジャッジ時間 | 2,142 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
def main(): N = int(input()) if N == 1: return 1 first_num = 1 # 次にチェックする階層の値を格納する配列 next_check = [first_num] # チェック済みの値を格納するコレクション checked = {first_num} step = 1 # 次にチェックする値がなくなる=一番深い階層までチェックが終わるまでループ while next_check: new_next_check = [] step += 1 # 次にチェックする配列のすべての値をチェック for val in next_check: bit_num = bin(val).count('1') # 進める場所または戻る場所にNがあれば終了 if val + bit_num == N or val - bit_num == N: return step # Nがない場合は進めるマス、戻れるマスが未チェック且つ取り得る範囲内なら配列に追加 val_plus = val + bit_num val_minus = val - bit_num if val_plus not in checked and val_plus < N: new_next_check.append(val_plus) checked.add(val_plus) if val_minus not in checked and val_minus < N: new_next_check.append(val_minus) checked.add(val_minus) next_check = new_next_check return -1 if __name__ == "__main__": print(main())