Binomial Sum 学习记录
binomial Sum 可以用来求 \(\sum_{i=0}^{n}[x^i]f(x)g^{i}(x)\) 即 \(f(g(x))\) 的某些项数的线性组合 , 一般是求 \([x^k]\sum_{i=0}^{n}[x^i]f(x)g^{i}(x)\) , 复杂度为 \(O(k)\)
具体流程如下:
-
设 \(c = [x^0]g(x)\)
-
设 \(F(x + c) = f(x+c) \pmod {x ^ {n+1}}\) , 这里设 \(F(x+c) = f(x+c)\) 是为了后面代入 \(g(x) - c\) , 代入 \(g(x) - c\) 是因为 \(g(x) - c\) 常数项为零, 这样可以使高次项对答案没有贡献. 即 \((g(x)-c)^i [i > k]\) 对答案不会产生贡献。(多项式的常数项为 \(0\) 在很多情况下也需要被注意)。
-
然后可以寻找 \(F(x)\) 的递推式,可以通过求导或实际意义。
-
然后就转化为了求 \([x^k]F(g(x)) = [x^k]\sum_{i=0}^{k}[x^i]F(x)g^i(x)\)
例题1 CF932E
求
\(\binom{n}{i}\) 可以看作 \([x^i](1+x)^n\) , \(i^k\) 可以看作 \([\frac{x^k}{k!}]e^{ix}\) . 那么就是要求 \([\frac{x^k}{k!}]\sum_{i=0}^{n}[x^i](1+x)^ne^{ix} = [\frac{x^k}{k!}](1+e^x)^n\)
那么 \([x^0]e^x = 1\). 所以设 \(F(x + 1) = (x + 1 + 1)^n = (x+2)^n \pmod{x^{k+1}}\) , 考虑递推求 \(F(x + 1)\) 。设 \(f(x + 1) = (x+2)^n\)
那么对 于 \(F(x + 1)\) , 这样会少考虑 \([x^{k}][2f'(x + 1)]x^k\) 的贡献. 所以
然后把多项式平移一下
提取系数得到
然后发现不知道 \(F[0]\) ,试着求一下
这样就得到了 \(F(x)\) .
而我们要求的是 \([\frac{x^k}{k!}]F(e^x) = [\frac{x^k}{k!}]\sum_{i=0}^{k}[x^i]F(x)e^{ix} = \sum_{i=0}^{k}i^k[x^i]F(x)\)
这样就可以 \(O(k+\log n)\) 解决这道题了