結果
| 問題 |
No.1916 Making Palindrome on Gird
|
| コンテスト | |
| ユーザー |
wolgnik
|
| 提出日時 | 2022-04-29 22:07:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,347 bytes |
| コンパイル時間 | 364 ms |
| コンパイル使用メモリ | 82,788 KB |
| 実行使用メモリ | 843,896 KB |
| 最終ジャッジ日時 | 2024-06-29 03:35:45 |
| 合計ジャッジ時間 | 2,657 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 10 MLE * 1 -- * 19 |
ソースコード
import sys
input = sys.stdin.readline
H, W = map(int, input().split())
a = [list(input())[: -1] for _ in range(H)]
mod = 10 ** 9 + 7
if a[0][0] != a[-1][-1]:
print(0)
exit(0)
base = H * W
from collections import deque as dq
Q = dq([H * W - 1])
d1 = [1, 0]
d2 = [-1, 0]
dp = [0] * (H * H * W * W)
dp[H * W - 1] = 1
vis = [0] * (H * H * W * W)
while len(Q):
t = Q.popleft()
u = t // base
v = t % base
if vis[t]: continue
vis[t] = 1
i, j = u // W, u % W
y, x = v // W, v % W
for k in range(2):
i2, j2 = i + d1[k], j + d1[~k]
if not (i2 in range(H) and j2 in range(W)): continue
u2 = i2 * W + j2
for kk in range(2):
y2, x2 = y + d2[kk], x + d2[~kk]
if not (y2 in range(H) and x2 in range(W)): continue
if a[i2][j2] != a[y2][x2]: continue
v2 = y2 * W + x2
dp[u2 * base + v2] += dp[t]
dp[u2 * base + v2] %= mod
Q.append(u2 * base + v2)
#print((i, j), (y,x),(i2, j2),(y2,x2))
#print((i, j), (y, x), len(Q))
res = 0
for i in range(H):
for j in range(W):
res += dp[(i * W + j) * base + i * W + j]
res %= mod
for i in range(H):
for j in range(W):
for k in range(2):
u, v = i + d1[k], j + d1[~k]
if u in range(H) and v in range(W) and a[i][j] == a[u][v]:
res += dp[(i * W + j) * base + u * W + v]
res %= mod
print(res)
wolgnik