# yukicoder No.2485 Add to Variables (Another) ## 問題 [No.2485 Add to Variables (Another)](https://yukicoder.me/problems/no/2485) ## 解説 操作のうち $A_N$ が増加するのは下二つのみであるから,それらは合わせて $B_N$ 回行われる${}:(\star)$. 数列 $X=(X_1,\dots,X_N)$ を $X_1=A_1,X_i=A_i-A_{i-1}\ (2\leq i\leq N)$ で定め,$A$ に対する各操作を $X$ に対して言い換えると次のようになる. - 何もしない. - 整数 $k\ (1\leq k\leq N-1)$ を選び,$X_1$ に $1$ を,$X_{k+1}$ に $-1$ を足す. - 整数 $k\ (2\leq k\leq N-1)$ を選び,$X_k$ に $1$ を足す. - $X_1$ に $1$ を足す. 上二つ/下二つをまとめて次のようになる. - 整数 $k\ (1\leq k\leq N)$ を選び,$X_1$ に $1$ を,$X_k$ に $-1$ を足す. - 整数 $k\ (1\leq k\leq N-1)$ を選び,$X_k$ に $1$ を足す. $(\star)$ より一つ目の操作は $M-B_N$ 回行われるから,数列 $C=(C_1,\dots,C_N)$ を $C_1=B_1-(M-B_N),C_i=B_i-B_{i-1}\ (2\leq i\leq N)$ で定めると,$X=(0,\dots,0)$ に対し次のいずれかの操作を $M$ 回行って $X=C$ とする方法の数を求めればよい. - 整数 $k\ (1\leq k\leq N)$ を選び,$X_k$ に $-1$ を足す. - 整数 $k\ (1\leq k\leq N-1)$ を選び,$X_k$ に $1$ を足す. その値は形式的冪級数を用いれば次のように表現できる(多項係数を考える). \begin{align*} [x^M]M!\prod_{k=1}^{N}\sum_{i\geq 0}\frac{1}{i!(i+|C_k|)!}x^{2i+|C_k|} \end{align*} これは計算量 $O(NM\log M)$ で計算できる.なお[(Another)でない方](https://yukicoder.me/problems/no/2484)もこれで通る.