結果
| 問題 |
No.2788 4-33 Hard
|
| コンテスト | |
| ユーザー |
PNJ
|
| 提出日時 | 2024-06-14 22:04:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 137 ms / 2,000 ms |
| コード長 | 1,175 bytes |
| コンパイル時間 | 628 ms |
| コンパイル使用メモリ | 81,628 KB |
| 実行使用メモリ | 76,728 KB |
| 最終ジャッジ日時 | 2024-06-14 22:05:01 |
| 合計ジャッジ時間 | 8,640 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 52 |
ソースコード
n = 10
mod = 998244353
inv = [1 for j in range(n+1)]
for a in range(2,n+1):
# ax + py = 1 <=> rx + p(-x-qy) = -q => x = -(inv[r]) * (p//a) (r = p % a)
res = (mod - inv[mod%a]) * (mod // a)
inv[a] = res % mod
def binom(n,r):
res = 1
for i in range(1,r+1):
res = res * (n + 1 - i) % mod
res = res * inv[i] % mod
return res
O = [list(map(int,input().split())) for i in range(5)]
X = [list(map(int,input().split())) for i in range(5)]
dp = [[[0 for _ in range(34)] for _ in range(5)] for _ in range(9)]
dp[0][0][0] = 1
for a in range(5):
for b in range(34):
c = O[a][b]
for n in range(7,-1,-1):
for x in range(5):
for y in range(34):
for m in range(1,min(c,8) + 1):
if n + m > 8:
break
xx,yy = x + m*a,y + m*b
if xx > 4:
break
if yy > 33:
break
cc = binom(c % mod,m)
dp[n+m][xx][yy] = (dp[n+m][xx][yy] + dp[n][x][y] * cc % mod) % mod
ans = 0
for x in range(5):
for y in range(34):
X[x][y] %= mod
a,b = 4 - x,33 - y
if y == 0:
ans = (ans + dp[8][a][b] * X[x][y] % mod) % mod
print(ans)
PNJ