結果
問題 | No.3071 Double Speedrun |
ユーザー |
![]() |
提出日時 | 2025-03-24 02:29:40 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,535 bytes |
コンパイル時間 | 340 ms |
コンパイル使用メモリ | 82,888 KB |
実行使用メモリ | 271,276 KB |
最終ジャッジ日時 | 2025-03-24 02:29:49 |
合計ジャッジ時間 | 8,377 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 1 TLE * 1 -- * 12 |
ソースコード
import sys input = sys.stdin.readline mod=998244353 H,W=map(int,input().split()) MAP=[input().strip() for i in range(H)] if MAP[0][1]=="#" or MAP[1][0]=="#": print(0) exit() LIST=[[] for i in range(H+W)] for i in range(H): for j in range(W): LIST[i+j].append((i,j)) DP=[[0]*2 for i in range(2)] DP[0][1]=1 for s in range(1,H+W-3): # i+j = s+1 LEN=len(LIST[s+1]) NDP=[[0]*LEN for i in range(LEN)] for i in range(len(DP)): for j in range(i+1,len(DP)): if DP[i][j]==0: continue x,y=LIST[s][i] z,w=LIST[s][j] for k in [i-1,i,i+1]: if 0<=k<len(LIST[s+1]): pass else: continue x2,y2=LIST[s+1][k] if MAP[x2][y2]=="#": continue if abs(x-x2)+abs(y-y2)!=1: continue for l in [j-1,j,j+1]: if 0<=l<len(LIST[s+1]): pass else: continue z2,w2=LIST[s+1][l] if MAP[z2][w2]=="#": continue if abs(z-z2)+abs(w-w2)!=1: continue if k<l: NDP[k][l]+=DP[i][j] NDP[k][l]%=mod DP=NDP #print(DP) print(sum(DP[0])%mod)