「题解」洛谷 P8768 [蓝桥杯 2021 国 A] 积木
可能在多项式大手子面前是一个基础内容,可是菜菜只能靠青蛙一步步教导才会......因为没写代码,可能有的式子还推错了。
首先确定 \(H_x\) 合法取值范围也就是 \([w+Lx,w+Rx]\),个数是 \(\mathcal{O}(Rn)\) 的。
那么求出 \(H_x-H_1\) 的可能的差值每种有多少个方案,\(H_y-H_x\) 的可能的差值每种有多少个方案,再适当地点积起来就得到了答案。
现在问题就是求 \(H_r-H_l=i\) 的方案数,令 \(n=r-l\),\(F\) 为答案的 OGF,则有:
\[F=(z^L+z^{L+1}+\cdots +z^R)^n=\left(\frac{z^L-z^{R+1}}{1-z}\right)^n
\]
提出 \(z^{Ln}\) 并令 \(k=R+1-L\) 那么即为求 \(F=\left(\frac{1-z^k}{1-z}\right)^n\) 的各项系数。
考虑对 \(F\) 求导,然后尝试化成整式递推的形式。
\[\begin{aligned}
F'&=n\cdot \left(\frac{1-z^k}{1-z}\right)^{n-1}\cdot \frac{(k-1)z^k-kz^{k-1}+1}{(1-z)^2}
\\
&=\frac{(1-z^k)^n}{(1-z)^n}\cdot \frac{n\cdot ((k-1)z^k-kz^{k-1}+1)}{(1-z)(1-z^k)}
\\
&=F\cdot \frac{n\cdot ((k-1)z^k-kz^{k-1}+1)}{(1-z)(1-z^k)}
\end{aligned}
\]
注意 \(F'\) 是 \(F\) 乘上一个分子分母仅有 \(\mathcal{O}(1)\) 项的有理分式,通分之后得到:
\[(1-z)(1-z^k)F'=F\cdot n\cdot ((k-1)z^k-kz^{k-1}+1)
\]
左右两边提取 \([z^m]\),即可得到 \(F\) 的整式递推:
\[(m-k)f_{m-k}-(m-k+1)f_{m-k+1}-mf_m+(m+1)f_{m+1}=n(k-1)f_{m-k}-nkf_{m-k+1}+nf_m
\]
可以 \(\mathcal{O}(nk)\) 暴力计算。