結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-02-05 17:24:30 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,349 bytes |
| コンパイル時間 | 151 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 18,208 KB |
| 最終ジャッジ日時 | 2024-07-08 05:46:06 |
| 合計ジャッジ時間 | 6,674 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 TLE * 1 -- * 28 |
ソースコード
from collections import deque
forward = [-1]
backward = [-1]
def count_one_bit(k):
binary = bin(k)[2:]
n_one_bit = 0
for b in binary:
if b == "1":
n_one_bit += 1
return n_one_bit
def main():
global forward
global backward
N = int(input())
# 各セルにおいて,前後に動いたときの移動先の番号を計算する
for cell_num in range(1, N+1):
n_one_bit = count_one_bit(cell_num)
# 前に進んだ場合のセル位置
if cell_num + n_one_bit <= N:
forward.append(cell_num + n_one_bit)
else:
forward.append(-1)
# 後ろに進んだ場合のセル位置
if cell_num - n_one_bit >= 0:
backward.append(cell_num - n_one_bit)
else:
backward.append(-1)
# ゴール(N)にいけるマスがないなら,-1を返す
if N not in forward:
print(-1)
return
q = []
reached = []
for cell_num in range(1, N+1):
if forward[cell_num] == N:
q.append(cell_num)
move = 1
while len(q) != 0:
new_q = []
for item in q:
reached.append(item)
if item == 1:
print(move+1)
return
for cell_num in range(1, N+1):
if (forward[cell_num] == item or backward[cell_num] == item) and cell_num not in reached:
new_q.append(cell_num)
q = new_q
move += 1
print(-1)
main()