Official
E - Count Sequences 2 Editorial
by
E - Count Sequences 2 Editorial
by
toam
答えは多項係数 \(\dfrac{(C_1+C_2+\ldots+C_N)!}{C_1!C_2!\dots C_N!}\) です.多項係数は二項係数の積としてあらわせます:
\[\dfrac{(C_1+C_2+\ldots+C_N)!}{C_1!C_2!\dots C_N!}=\binom{C_1}{C_1}\binom{C_1+C_2}{C_2}\dots \binom{C_1+C_2+\dots +C_N}{C_N}\]
二項係数を(素数とは限らない) \(M\) で割った余りの求め方はいくつかありますが,今回は \(\sum C\leq 5000\) という制約があるため,二項係数に関する以下の関係式を用いて \(\binom{n}{k}\ (0\leq k\leq n\leq 5000)\) を簡単に前計算することができます.
\[\binom{n}{k}=\binom{n-1}{k-1}+\binom{n-1}{k}\]
これにより,各テストケースを \(O(N)\) で解くことができます.
T, mod = map(int, input().split())
K = 5010
binom = [[0] * K for i in range(K)]
binom[0][0] = 1
for n in range(1, K):
binom[n][0] = 1
for k in range(1, n + 1):
binom[n][k] = (binom[n - 1][k - 1] + binom[n - 1][k]) % mod
for _ in range(T):
N = int(input())
C = list(map(int, input().split()))
ans = 1
s = 0
for i in C:
s += i
ans *= binom[s][i]
ans %= mod
print(ans % mod)
posted:
last update: