結果
問題 | No.1916 Making Palindrome on Gird |
ユーザー |
![]() |
提出日時 | 2022-06-07 01:22:07 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,240 ms / 3,000 ms |
コード長 | 613 bytes |
コンパイル時間 | 189 ms |
コンパイル使用メモリ | 82,224 KB |
実行使用メモリ | 254,444 KB |
最終ジャッジ日時 | 2024-09-21 04:48:10 |
合計ジャッジ時間 | 11,794 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import sys def input():return sys.stdin.readline().strip() mem={} def calc(a,b,c,d,S,H,W): if a>c or b>d: return 0 if S[a][b]!=S[c][d]: return 0 if a+b==c+d: return (a==c) and (b==d) if a+b+1==c+d: return (a==c) or (b==d) if not (a*W+b)*H*W+(c*W+d) in mem: mem[(a*W+b)*H*W+(c*W+d)]=calc(a+1,b,c-1,d,S,H,W)+calc(a+1,b,c,d-1,S,H,W)+calc(a,b+1,c-1,d,S,H,W)+calc(a,b+1,c,d-1,S,H,W) mem[(a*W+b)*H*W+(c*W+d)]%=(10**9+7) return mem[(a*W+b)*H*W+(c*W+d)] H,W=map(int,input().split()) S=[input() for i in range(H)] print(int(calc(0,0,H-1,W-1,S,H,W)))