結果
問題 | No.124 門松列(3) |
ユーザー |
|
提出日時 | 2024-03-13 15:54:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 77 ms / 5,000 ms |
コード長 | 1,890 bytes |
コンパイル時間 | 301 ms |
コンパイル使用メモリ | 82,836 KB |
実行使用メモリ | 78,048 KB |
最終ジャッジ日時 | 2024-09-29 22:53:34 |
合計ジャッジ時間 | 2,726 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 26 |
ソースコード
import sysimport mathimport bisectfrom heapq import heapify, heappop, heappushfrom collections import deque, defaultdict, Counterfrom functools import lru_cachefrom itertools import accumulate, combinations, permutations, productsys.setrecursionlimit(1000000)MOD = 10 ** 9 + 7MOD99 = 998244353input = lambda: sys.stdin.readline().strip()NI = lambda: int(input())NMI = lambda: map(int, input().split())NLI = lambda: list(NMI())SI = lambda: input()SMI = lambda: input().split()SLI = lambda: list(SMI())EI = lambda m: [NLI() for _ in range(m)]def main():W, H = NMI()M = EI(H)# h, w, dqueue = deque()queue.append([0, 1, 0])queue.append([1, 0, 2])steps = [[[10**10]*4 for _ in range(W)] for _ in range(H)]steps[0][1][0] = 1steps[1][0][2] = 1DH = [0, 0, 1, -1]DW = [1, -1, 0, 0]while queue:now_h, now_w, now_d = queue.popleft()now_step = steps[now_h][now_w][now_d]now = M[now_h][now_w]prev_h = now_h - DH[now_d]prev_w = now_w - DW[now_d]prev = M[prev_h][prev_w]for d, (dh, dw) in enumerate(zip(DH, DW)):goto_h = now_h + dhgoto_w = now_w + dwgoto_d = dgoto_step = now_step + 1if goto_h < 0 or goto_h >= H or goto_w < 0 or goto_w >= W:continuegoto = M[goto_h][goto_w]if goto == now or goto == prev:continueif prev < now < goto or prev > now > goto:continueif 0 <= steps[goto_h][goto_w][goto_d] <= goto_step:continuequeue.append((goto_h, goto_w, goto_d))steps[goto_h][goto_w][goto_d] = goto_stepans = min(steps[H-1][W-1])if ans >= 10**10:print(-1)else:print(ans)if __name__ == "__main__":main()