結果
| 問題 |
No.340 雪の足跡
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 19:35:52 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,974 bytes |
| コンパイル時間 | 159 ms |
| コンパイル使用メモリ | 81,932 KB |
| 実行使用メモリ | 106,904 KB |
| 最終ジャッジ日時 | 2025-06-12 19:36:26 |
| 合計ジャッジ時間 | 11,553 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 13 TLE * 3 -- * 16 |
ソースコード
from collections import deque
import sys
def main():
input = sys.stdin.read().split()
ptr = 0
W = int(input[ptr])
ptr += 1
H = int(input[ptr])
ptr += 1
N = int(input[ptr])
ptr += 1
size = W * H
adjacency = [set() for _ in range(size)]
for _ in range(N):
M_i = int(input[ptr])
ptr += 1
B = list(map(int, input[ptr:ptr + M_i + 1]))
ptr += M_i + 1
for j in range(M_i):
prev_block = B[j]
curr_block = B[j + 1]
prev_w = prev_block % W
prev_h = prev_block // W
curr_w = curr_block % W
curr_h = curr_block // W
path = []
if prev_h == curr_h:
if prev_w <= curr_w:
for w in range(prev_w, curr_w + 1):
path.append(w + prev_h * W)
else:
for w in range(prev_w, curr_w - 1, -1):
path.append(w + prev_h * W)
else:
if prev_h <= curr_h:
for h in range(prev_h, curr_h + 1):
path.append(prev_w + h * W)
else:
for h in range(prev_h, curr_h - 1, -1):
path.append(prev_w + h * W)
for i in range(len(path) - 1):
a = path[i]
b = path[i + 1]
adjacency[a].add(b)
adjacency[b].add(a)
start = 0
end = W * H - 1
distance = [-1] * size
distance[start] = 0
queue = deque([start])
while queue:
current = queue.popleft()
if current == end:
print(distance[current])
return
for neighbor in adjacency[current]:
if distance[neighbor] == -1:
distance[neighbor] = distance[current] + 1
queue.append(neighbor)
print("Odekakedekinai..")
if __name__ == "__main__":
main()
gew1fw