---
# System prepended metadata

title: ニワンゴくんとゲーム 別解

---

# ニワンゴくんとゲーム 別解

#### 問題文
[リンク](https://atcoder.jp/contests/dwacon2018-final-open/tasks/dwacon2018_final_d)

#### 解法
$\left[x^n\right]F(x)=$「1から始めて魔力をちょうど$n$になるように操作する方法の数」といった母関数を考えます。
操作について考えることで$$F(x) = x + xF(x) + F(x^2) + xF(x^2)$$という式が立ちます。
$F(x)$ について解くと
\begin{aligned}
F(x) &= \frac{x}{1-x} + \frac{(1+x)F(x^2)}{1-x}\\
\left[x^n\right]F(x) &= [x^n]\frac{x}{1-x} + [x^n]\frac{(1+x)F(x^2)}{1-x}\\
&= [x^n]\frac{x}{1-x}+[x^n]\frac{(1+2x+x^2)F(x^2)}{1-x^2}
\end{aligned}
と書けます。
左の項の計算は容易で、右の項は Bostan-Mori の要領で適当な多項式$P$ を用いて $[x^{\lfloor\frac{n}{2}\rfloor}] \frac{PF(x)}{1-x}$を計算することに帰着できます。
これを繰り返し適用することで求めたいものは適当な多項式の列 $P_i$ を用いて
$$[x^n]F(x) = \sum_{i \geq 1} [x^{\lfloor n/2^{i-1}\rfloor}]\frac{xP_i}{(1-x)^i}$$
の形で書けることがわかり、これは負の二項係数やBostan-Moriで計算可能です。

2023/08/27 追記
もう少し一般化できそうな形が思いついたので

$$F(x) = \frac{A(x) + B(x)F(x^2)}{C(x)}$$

という形の $F(x)$ について
$$\left[ x^n\right]\frac{P(x) + Q(x)F(x)}{R(x)}$$
を計算したいとしよう。
$$ \left[ x^n\right]\frac{P(x) + Q(x)F(x)}{R(x)} = \left[ x^n\right]\frac{P(x)C(x) + Q(x)A(x) + Q(x)B(x)F(x^2)}{R(x)C(x)} $$
となり、分子分母に $R(-x)C(-x)$ をかけると分母は偶関数となって BostanMori でみる形となり、適当な多項式 $P'(x), Q'(x), R'(x)$ を用いて
$$\left[ x^{\lfloor\frac{n}{2}\rfloor}\right]\frac{P'(x) + Q'(x)F(x)}{R'(x)}$$
の計算をすることに帰着できます。
これを$n=0$となるまで続ければあとは0次の項で計算できるようになります。
計算量は入力の $A, B, C$ の最大次数を $M$, $P, Q, R$の最大次数を $L$ と置き、長さ$K$の畳み込みの計算量を$\text{MUL}(K)$ と置くと$O(\text{MUL}(L+ M\log N) \log N)$ となります。

このページで解説した問題なら $A=x,B=1+x,C=1-x,P=0, Q=1,R=1$ で計算すればいい。