結果
| 問題 |
No.340 雪の足跡
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:06:11 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,990 bytes |
| コンパイル時間 | 223 ms |
| コンパイル使用メモリ | 81,792 KB |
| 実行使用メモリ | 110,552 KB |
| 最終ジャッジ日時 | 2025-06-12 21:08:25 |
| 合計ジャッジ時間 | 6,894 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 11 TLE * 5 -- * 16 |
ソースコード
import sys
from collections import deque, defaultdict
def process_segment(a, b, W, graph):
wa, ha = a % W, a // W
wb, hb = b % W, b // W
if wa == wb:
step = 1 if hb > ha else -1
current_h = ha
while current_h != hb:
next_h = current_h + step
current = wa + current_h * W
next_p = wa + next_h * W
if next_p not in graph[current]:
graph[current].add(next_p)
if current not in graph[next_p]:
graph[next_p].add(current)
current_h = next_h
elif ha == hb:
step = 1 if wb > wa else -1
current_w = wa
while current_w != wb:
next_w = current_w + step
current = current_w + ha * W
next_p = next_w + ha * W
if next_p not in graph[current]:
graph[current].add(next_p)
if current not in graph[next_p]:
graph[next_p].add(current)
current_w = next_w
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
graph = defaultdict(set)
for _ in range(N):
M_i = int(input[ptr]); ptr +=1
path = list(map(int, input[ptr:ptr+M_i+1]))
ptr += M_i+1
for j in range(M_i):
a = path[j]
b = path[j+1]
process_segment(a, b, W, graph)
start = 0
end = W * H -1
if start == end:
print(0)
return
distance = [-1] * (W * H)
distance[start] = 0
q = deque()
q.append(start)
while q:
u = q.popleft()
if u == end:
break
for v in graph[u]:
if distance[v] == -1:
distance[v] = distance[u] + 1
q.append(v)
if distance[end] == -1:
print("Odekakedekinai..")
else:
print(distance[end])
if __name__ == "__main__":
main()
gew1fw