結果
| 問題 | 
                            No.340 雪の足跡
                             | 
                    
| コンテスト | |
| ユーザー | 
                             gew1fw
                         | 
                    
| 提出日時 | 2025-06-12 14:36:59 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,329 bytes | 
| コンパイル時間 | 165 ms | 
| コンパイル使用メモリ | 82,224 KB | 
| 実行使用メモリ | 115,936 KB | 
| 最終ジャッジ日時 | 2025-06-12 14:37:04 | 
| 合計ジャッジ時間 | 5,399 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 5 | 
| other | AC * 15 TLE * 1 -- * 16 | 
ソースコード
import sys
from collections import deque
def main():
    W, H, N = map(int, sys.stdin.readline().split())
    # Initialize direction grids
    north = [[False] * W for _ in range(H)]
    east = [[False] * W for _ in range(H)]
    south = [[False] * W for _ in range(H)]
    west = [[False] * W for _ in range(H)]
    for _ in range(N):
        M_i = int(sys.stdin.readline())
        B = list(map(int, sys.stdin.readline().split()))
        for j in range(M_i):
            prev = B[j]
            curr = B[j+1]
            x1 = prev % W
            y1 = prev // W
            x2 = curr % W
            y2 = curr // W
            if x1 == x2:
                # Vertical movement (north or south)
                start_y = min(y1, y2)
                end_y = max(y1, y2) - 1
                for y in range(start_y, end_y + 1):
                    north[y][x1] = True
                    south[y+1][x1] = True
            else:
                # Horizontal movement (east or west)
                start_x = min(x1, x2)
                end_x = max(x1, x2) - 1
                for x in range(start_x, end_x + 1):
                    east[y1][x] = True
                    west[y1][x+1] = True
    # BFS setup
    distance = [[-1] * W for _ in range(H)]
    q = deque()
    distance[0][0] = 0
    q.append((0, 0))
    # Directions: check each possible move
    while q:
        x, y = q.popleft()
        if y == H-1 and x == W-1:
            break
        # North
        if north[y][x] and y + 1 < H:
            if distance[y+1][x] == -1:
                distance[y+1][x] = distance[y][x] + 1
                q.append((x, y+1))
        # South
        if south[y][x] and y - 1 >= 0:
            if distance[y-1][x] == -1:
                distance[y-1][x] = distance[y][x] + 1
                q.append((x, y-1))
        # East
        if east[y][x] and x + 1 < W:
            if distance[y][x+1] == -1:
                distance[y][x+1] = distance[y][x] + 1
                q.append((x+1, y))
        # West
        if west[y][x] and x - 1 >= 0:
            if distance[y][x-1] == -1:
                distance[y][x-1] = distance[y][x] + 1
                q.append((x-1, y))
    goal = distance[H-1][W-1]
    if goal == -1:
        print("Odekakedekinai..")
    else:
        print(goal)
if __name__ == "__main__":
    main()
            
            
            
        
            
gew1fw