結果
| 問題 |
No.2783 4-33 Easy
|
| コンテスト | |
| ユーザー |
PNJ
|
| 提出日時 | 2024-06-14 22:09:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 148 ms / 2,000 ms |
| コード長 | 1,417 bytes |
| コンパイル時間 | 239 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 77,340 KB |
| 最終ジャッジ日時 | 2024-06-14 22:09:27 |
| 合計ジャッジ時間 | 5,264 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
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 = [[0 for _ in range(34)] for _ in range(5)]
X = [[0 for _ in range(34)] for _ in range(5)]
N = int(input())
A = list(map(int,input().split()))
B = list(map(str,input().split()))
for i in range(N):
a = A[i]
b = 0
if B[i][-1] == 'X':
if len(B[i]) >= 2:
b = int(B[i][:-1])
X[a][b] += 1
else:
b = int(B[i])
O[a][b] += 1
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