結果
問題 | No.2788 4-33 Hard |
ユーザー |
![]() |
提出日時 | 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)