結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-06-15 09:37:09 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 677 ms / 5,000 ms |
| コード長 | 815 bytes |
| コンパイル時間 | 96 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 44,740 KB |
| 最終ジャッジ日時 | 2024-10-03 18:55:58 |
| 合計ジャッジ時間 | 23,731 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
import numpy as np
N = int(input())
def get_bit_sum(num):
return bin(num).count("1")
visited = np.zeros((N,)).astype(bool)
min_value = np.zeros((N,)) + 1e10
pre_visited = visited.copy()
visited[0] = 1
min_value[0] = 1
while np.sum(visited^pre_visited)>0:
arg = np.argwhere(pre_visited^visited).reshape(-1)
move = np.array([get_bit_sum(i) for i in arg+1])
move = np.concatenate([move,-move])
arg = np.concatenate([arg,arg])
min_values = min_value[arg]+1
for i in range(arg.shape[0]):
position = arg[i]+move[i]
if position<1 or position>N-1:
continue
min_value[position] = min(min_values[i],min_value[position])
pre_visited = visited.copy()
visited = min_value < 1e10
output = min_value[-1] if min_value[-1]<1e10 else -1
print(int(output))