結果

問題 No.1916 Making Palindrome on Gird
ユーザー tktk_snsntktk_snsn
提出日時 2022-04-29 23:31:56
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,592 ms / 3,000 ms
コード長 1,762 bytes
コンパイル時間 233 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 181,652 KB
最終ジャッジ日時 2024-06-29 05:17:50
合計ジャッジ時間 14,862 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

from collections import Counter
from collections import defaultdict
mod = 10 ** 9 + 7
U = 201
H, W = map(int, input().split())
G = [input() for _ in range(H)]
if H == 1 and W == 1:
print(1)
exit()
def id(x, y, xx, yy):
res = x
res = res * U + y
res = res * U + xx
res = res * U + yy
return res
def parse(m):
m, yy = divmod(m, U)
m, xx = divmod(m, U)
x, y = divmod(m, U)
return x, y, xx, yy
if G[0][0] != G[H-1][W-1]:
print(0)
exit()
dp = defaultdict(int)
dp[id(0, 0, H-1, W-1)] = 1
while True:
update = False
finish = False
ndp = defaultdict(int)
for k, v in dp.items():
x, y, xx, yy = parse(k)
for di, dj in [(0, 1), (1, 0)]:
nx = x + di
ny = y + dj
if nx < 0 or nx >= H or ny < 0 or ny >= W:
continue
for ddi, ddj in [(0, -1), (-1, 0)]:
nnx = xx + ddi
nny = yy + ddj
if nnx < 0 or nnx >= H or nny < 0 or nny >= W:
continue
if G[nx][ny] != G[nnx][nny]:
continue
if (nx + ny) >= (nnx + nny):
finish = True
if (H + W - 1) % 2 == 1 and (nx, ny) != (nnx, nny):
continue
if (H + W - 1) % 2 == 0 and ((x, y) != (nnx, nny) or (nx, ny) != (xx, yy)):
continue
ndp[id(nx, ny, nnx, nny)] += v
ndp[id(nx, ny, nnx, nny)] %= mod
update = True
dp = ndp
if finish:
break
if not update:
break
if not finish:
print(0)
else:
ans = 0
for k, v in dp.items():
ans += v
ans %= mod
print(ans)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0