用红色标出来的是需要特别注意的地方。
计数原理
乘法原理
\(n\) 元组 \((a_1,a_2,\cdots,a_n)\) 中,\(a_1\) 有 \(x_1\) 种取值,\(a_2\) 有 \(x_2\) 种取值,\(\cdots\),\(a_n\) 有 \(x_n\) 种取值,则一共有 \(\prod_{i=1}^n a_i\) 种不同的 \(n\) 元组。
加法原理
设集合 \(A\) 被划分成 \(n\) 个集合 \(S_1,S_2,\cdots,S_n\)(这些集合两两交集为空,并集为 \(A\))。则 \(|A|=\sum_{i=1}^n |S_i|\)。
除此之外,还有减法原理和除法原理,可以看做是上述定理的逆用。
排列与组合
我们考虑 \(n\) 个不同物品一共有多少种排列。
给定 \(m\) 种不同的物品,第 \(i\) 种物品有 \(a_i\) 个,同种物品是相同的。求出将这些物品分成 \(n\) 组(不能为空)的方案数。
正难则反。考虑反过来做。
不妨对每种物品分开考虑,于是总方案数为
\[\prod_{i=1}^m {a_i+n-1\choose n-1}
\]
对于不合法的情况,枚举空盒子数量。假设有 \(k\) 个盒子为空,我们有
\[g(k)={n\choose k}\prod_{i=1}^{m} {a_i+n-k-1\choose n-k-1}
\]
于是答案为
\[\sum_{k=0}^{n-1} (-1)^k g(k)
\]
构造一个 \(\texttt{01}\) 串,满足以下条件:
- 有 \(n\) 个 \(\texttt{1}\) 和 \(m\) 个 \(\texttt{0}\);
- 第一个字符是 \(\texttt{0}\),最后一个字符是 \(\texttt{1}\);
- 所有的 \(\texttt{1}\) 都不相邻。
将符合条件的串放到一个 01-Trie 上,求节点数。
在本题中,01-Trie 无根,且认为字符存储在节点上。
\(T\leq 2\times 10^6\),\(n,m\leq 5\times 10^{18}\)。
二项式反演
设 \(f(n)\) 表示恰好用 \(n\) 个有标号元素形成特定结构的方案数,\(g(n)\) 表示用至多 \(n\) 个有标号元素形成特定结构的总方案数。
利用 \(f\) 来表达 \(g\) 是 trivial 的。
\[g(n)=\sum_{i=0}^n {n\choose i}f(i)
\]
反过来,我们有
\[f(n)=\sum_{i=0}^n{n\choose i}(-1)^{n-i}g(i)
\]
这就是二项式反演的第一形式:“至多-恰好”。
同理,我们有
设 \(f(n)\) 表示恰好用 \(n\) 个有标号元素形成特定结构的方案数,\(g(n)\) 表示用至少 \(n\) 个有标号元素形成特定结构的总方案数。
我们有
\[g(i)=\sum_{k=i}^n {n\choose k} f(k)\iff f(i)=\sum_{k=i}^n {n\choose k}(-1)^{i-k}g(k)
\]
求长度为 \(n\) 的错排的方案数,\(1\leq n\leq 20\)。
考虑“至多-恰好”的形式,设 \(g(i)\) 为至多有 \(i\) 个位置错位的方案数,显然 \(g(i)=i!\)(任意打乱都符合)。
于是我们有
\[f(n)=\sum_{i=0}^n {n\choose i}(-1)^{n-i}i!
\]
高维二项式反演
我们以 CF997C Sky Full of Stars 为例。
用红色,绿色,蓝色三种颜色染一个 \(n \times n\) 的正方形网格,求有多少种染色方案使得至少一行或一列是同一种颜色。结果对 \(998,244,353\) 取模。
\(n\leq 10^6\)。
设 \(f(i,j)\) 为恰好有 \(i\) 行 \(j\) 列颜色相同的方案数,\(g(i,j)\) 为至少有 \(i\) 行 \(j\) 列颜色相同的方案数。
我们有
\[f(x,y)=\sum_{i=x}^n{i\choose x}(-1)^{i-x}\sum_{j=y}^n (-1)^{j-y} {j\choose y} g(i,j)
\]
稍微化得好看一点。
\[f(x,y)=\sum_{i=x}^n\sum_{j=y}^n {i\choose x}{j\choose y}(-1)^{i-x}(-1)^{j-y} g(i,j)
\]
答案显然为 \(3^{n^2}-f(0,0)\)。考虑计算 \(g\)。
\[g(i,j)=\begin{cases}
\displaystyle 3^{n^2}, & i=j=0 \\
\displaystyle {n\choose i}\cdot 3^i\cdot 3^{n^2-ni}, & i\neq 0,j=0 \\
\displaystyle {n\choose j}\cdot 3^j\cdot 3^{n^2-nj}, & i=0,j\neq 0 \\
\displaystyle {n\choose i}{n\choose j}3\cdot 3^{(n-i)(n-j)} & i,j\neq 0
\end{cases}
\]
我们拆一下式子。
\[\begin{aligned}
f(0,0)&=\sum_{i=0}^n\sum_{j=0}^n (-1)^{i+j} g(i,j) \\
&=\sum_{i=1}^n\sum_{j=1}^n (-1)^{i+j} g(i,j)-2\sum_{i=1}^n g(0,i)+g(0,0)
\end{aligned}
\]
注意到二重求和严重拖累的复杂度,于是我们要简化它。
\[\begin{aligned}
\sum_{i=1}^n\sum_{j=1}^n (-1)^{i+j}3\cdot 3^{(n-i)(n-j)}&=\sum_{i=1}^n\sum_{j=1}^n{n\choose i}{n\choose j}(-1)^{i+j}3\cdot 3^{n^2}\cdot 3^{-ni}\cdot 3^{-nj}\cdot 3^{ij} \\
&=\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{n^2+1-ni}\sum_{j=1}^n{n\choose j}(-1)^j\cdot 3^{-nj} \cdot 3^{ij} \\
&=\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{n^2+1-ni}\sum_{j=1}^n{n\choose j}(-1)^j\cdot 3^{(i-n)j} \\
&=3^{n^2+1}\sum_{i=1}^n{n\choose i}(-1)^{i}\cdot 3^{-ni}\left[(1-3^{i-n})^{n}-1\right]
\end{aligned}
\]
于是我们在 \(\Theta(n\log n)\) 的时间复杂度内解决了本题。
差分与下降幂
定义差分算子
\[\Delta f=f(x+1)-f(x)
\]
定义 \(\mathbf{E}f=f(x+1)\)。
Thus
-
\(\Delta (u\pm v)=\Delta u\pm \Delta v\).
-
\(\Delta Cu=C\Delta u\) where \(C\) is a constant.
-
\(\Delta uv=\textcolor{red}{u\Delta v+\mathbf{E}v\Delta u}。\)对 \(m\ge 0\)
定义 \(x\) 的 \(m\) 次下降幂
\[x^{\underline{m}}=x(x-1)\cdots (x-m+1)
\]
和 \(m\) 次上升幂
\[x^{\overline{m}}=x(x+1)\cdots (x+m-1)
\]
(特别地,\(x^{\underline{0}}=x^{\overline{0}}=1\))
注意到 \(n!=n^{\underline{n}}=1^{\overline{n}}\)。
那么对于指数为负的情况捏?
对于下降幂,我们注意到
\[x^{\underline{m}}=(x-m+1)x^{\underline{m-1}}
\]
于是
\(x^{\underline{0}}=(x+1)x^{\underline{-1}}\)
\(x^{\underline{-1}}=(x+2)x^{\underline{-2}}\)
不难推出
\(\displaystyle x^{\underline{-1}}=\frac{1}{x+1}, x^{\underline{-2}}=\frac{1}{(x+1)(x+2)}\)
于是我们可以扩充下降幂的定义
\[x^{\underline{m}}=\begin{cases}
x(x-1)\cdots(x-m+1), & m\gt 0 \\
1, & m=0 \\
\displaystyle\frac{1}{(x+1)(x+2)\cdots(x+(-m))} & m\lt 0
\end{cases}
\]
注意到
\[x^{\underline{-m}}=\frac{1}{(x+m)^{\underline{m}}}
\]
对于下降幂,我们有很好的性质
\[\Delta x^{\underline{n}}=nx^{\underline{n-1}}
\]
证明:
\[\begin{aligned}
\Delta x^{\underline{n}}&=(x+1)x(x-1)\cdots (x-n+2)-x(x-1)\cdots(x-n+1) \\
&=[x+1-(x-n+1)]x(x-1)\cdots (x-n+2) \\
&=nx^{\underline{n-1}}
\end{aligned}
\]
证毕。
定和式与不定和式
我们定义定和式
\[{\sum}_{a}^{b} f(x)\delta x=\sum_{i=a}^{\textcolor{red}{b-1}} f(i)
\]
类比无限微积分中的
\[\int_a^b \mathrm{d}f(x)=f(b)-f(a)
\]
于是我们有
\[{\sum}_{a}^{b} \Delta f(x)\delta x=f(b)-f(a)
\]
类似的,可以定义不定和式。具体地,若 \(f=\Delta F\),则 \(\sum f=F+C\)(其中 \(C\) 为常量)
我们立刻可以得到
-
\(\displaystyle {\sum}_a^a f(x)\delta x=0\)
-
\(\displaystyle {\sum}_a^b f(x)\delta x=-{\sum}_b^a f(x)\delta x\)
-
\(\displaystyle {\sum}_a^b f(x)\delta x+{\sum}_b^c f(x)\delta x={\sum}_a^c f(x)\delta x\)
-
\(\displaystyle {\sum}_a^b (f(x)+g(x))\delta x={\sum}_a^b f(x)\delta x+{\sum}_a^b g(x)\delta x\)
-
\(\displaystyle {\sum}_a^b Cf(x)\delta x=C{\sum}_a^b f(x)\delta x\)
例 1
求出
\[\sum_{i=0}^{n-1} a^i \quad (a\neq 1)
\]
我们有 \(\Delta a^x=a^{x+1}-a^x=(a-1)a^x\)。
于是 \(\displaystyle a^x=\Delta\left(\frac{a^x}{a-1}\right)\)。
代入可以得到
\[\sum_{i=0}^{n-1} a^i={\sum}_{0}^n \Delta\left(\frac{a^x}{a-1}\right)\delta x=\frac{a^n-1}{a-1}
\]
例 2
计算
\[\sum_{i=1}^{n} i^2
\]
注意到 \(x^2=x^{\underline{2}}+x^{\underline{1}}\),而且 \(x^{\underline{2}}=\Delta \frac{1}{3}x^{\underline{3}},x^{\underline{1}}=\Delta \frac{1}{2}x^{\underline{2}}\)。
于是
\[\begin{aligned}
\sum_{i=1}^{n} i^2&=\sum_{i=0}^{n} (i^{\underline{2}}+i^{\underline{1}})\\
&={\sum}_{0}^{n+1} (\Delta \frac{1}{3}x^{\underline{3}}+\Delta \frac{1}{2}x^{\underline{2}}) \\
&=\left[\frac{1}{3}x^{\underline{3}}+\frac{1}{2}x^{\underline{2}}\right]\bigg|_{0}^{n+1}\\
&=\frac{1}{3}(n+1)(n)(n-1)+\frac{1}{2}n(n+1)\\
&=\frac{1}{6}n(n+1)(2n+1)
\end{aligned}
\]
求出
\[\sum_{i=1}^n \frac{1}{\prod_{j=i}^{i+m-1}j}
\]
其中 \(n+m\leq 500,n\gt 0,m\gt 1\)。
\[\begin{aligned}
\sum_{i=1}^n \frac{1}{\prod_{j=i}^{i+m-1}j}&=
\sum_{i=0}^{n-1} \frac{1}{\prod_{j=i+1}^{i+m}j} \\
&=\sum_{i=0}^{n-1} \frac{1}{(i+m)(i+m-1)\cdots (i+1)} \\
&=\sum_{i=0}^{n-1} i^{\underline{-m}} \\
&={\sum}_0^n \Delta\left(\frac{x^{\underline{1-m}}}{1-m}\right)\delta x \\
&=\frac{n^{\underline{1-m}}-0^{\underline{1-m}}}{1-m} \\
&=\frac{\frac{1}{(m-1)(m-2)\cdots 1}-\frac{1}{(n+1)(n+2)\cdots (n+m-1)}}{m-1} \\
&=\frac{\frac{(n-m+1)(n-m)\cdots m}{(n+m-1)!}-\frac{n!}{(n+m-1)!}}{m-1} \\
&=\frac{(n+m-1)^{\underline{n}}-n!}{(m-1)(n+m-1)!}
\end{aligned}
\]
例 3
求证:
\[\sum_{i=0}^{n} {i\choose m}={n+1 \choose m+1}
\]
(上指标求和)
我们有 \(\displaystyle {n\choose k}=\frac{n^{\underline{k}}}{k!}\)
于是
\[\begin{aligned}
\sum_{i=0}^n {i\choose m}&=\sum_{i=0}^{n}\frac{i^{\underline{m}}}{m!} \\
&=\frac{1}{m!}{\sum}_0^{n+1} \Delta \frac{x^{\underline{m+1}}}{m+1} \delta x \\
&=\frac{1}{m!}\frac{(n+1)^{\underline{m+1}}}{m+1} \\
&=\frac{(n+1)^{\underline{m+1}}}{(m+1)}! \\
&={n+1\choose m+1}
\end{aligned}
\]
现在将有限和无限积分表对照如下。
| $f $ |
\(\sum f\) |
\(f\) |
\(\displaystyle \int f\) |
| \(x^{\underline{n}}\) |
\(\displaystyle \frac{x^{\underline{n+1}}}{n+1}\) |
\(x^n\) |
\(\displaystyle \frac{x^{n+1}}{n+1}\) |
| \(2^x\) |
\(2^x\) |
\(\mathrm{e}^x\) |
\(\mathrm{e}^x\) |
| \(a^x\) |
\(\displaystyle \frac{a^x}{a-1}\) |
\(a^x\) |
\(a^x\ln a\) |
Stirling 数与下降幂
我们知道,下降幂在有限微积分中担当起了无限微积分中幂函数的职责。但是我们常见的是幂函数,我们需要将幂函数转为下降幂。
我们有
\[x^n=\sum_{k=0}^n {n\brace k} x^{\underline{k}}
\]
\[x^{\underline{n}}=\sum_{k=0}^{n} {n\brack k}(-1)^{n-k} x^k
\]
其中 \(\displaystyle {n\brace k}\) 表示第二类 Stirling 数,即将 \(n\) 个元素分进 \(k\) 个集合(不计集合的顺序)的方案数,\(\displaystyle {n\brack k}\) 表示第一类 Stirling 数,即将 \(n\) 个元素分进 \(k\) 个环里(不计环的顺序)的方案数。
由此我们得到 \(1\sim n\) 的 \(k\) 次幂和的公式。
\[\begin{aligned}
\sum_{i=0}^{n} i^k&=\sum_{i=0}^n\sum_{j=0}^{k}{k\brace j} i^{\underline{j}} \\
&=\sum_{j=0}^k {k\brace j}\sum_{i=0}^{n} i^{\underline{j}} \\
&=\sum_{j=0}^k {k\brace j}{\sum}_{0}^{n+1} \Delta \frac{x^{\underline{j+1}}}{j+1} \delta x\\
&=\sum_{j=0}^k {k\brace j}\frac{(n+1)^{\underline{j+1}}}{j+1}
\end{aligned}
\]
求
\[\sum_{i=1}^n i^k a^i
\]
其中 \(n\leq 10^{18}\),\(k\leq 2\times 10^3\)。
\[\begin{aligned}
\sum_{i=1}^n i^k a^i&=\sum_{i=1}^na^i\sum_{j=0}^k {k\brace j}i^{\underline{j}} \\
&=\sum_{j=0}^{k} {k\brace j}\sum_{i=1}^n a^ii^{\underline{j}} \\
&=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}a^xx^{\underline{j}}\delta x
\end{aligned}
\]
进行分类讨论。
\[\begin{aligned}
&=\sum_{j=0}^{k} {k\brace j}{\sum}_1^{n+1}x^{\underline{j}}\delta x \\
&=\sum_{j=0}^k {k\brace j}\frac{(n+1)^{\underline{j}}-1^{\underline{j}}}{j+1}
\end{aligned}
\]
预处理 \(\Theta(k^2)\) 或 \(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。
我们有
\[\Delta uv=u\Delta v+\mathbf{E}v\Delta u
\]
两边同时求和,得
\[uv=\sum u\Delta v\delta x+\sum\mathbf{E}v\Delta u\delta x
\]
即
\[\sum u\Delta v\delta x=uv-\sum\mathbf{E}v\Delta u\delta x
\]
考虑求出 \(a^xx^{\underline{j}}\) 的“原和式”(不定和式)。我们不妨令 \(u=a^x\),\(\Delta v=x^{\underline{j}}\)(则 \(v=\dfrac{x^{\underline{j+1}}}{j+1}\))
于是 \(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j+1}}}{j+1}-\sum (x+1)^{\underline{j}}(a-1)a^x\delta x\)
好像不可做。如果令 \(u=x^{\underline{j}}\),\(\Delta v=a^x\)(则 \(v=\dfrac{a^x}{a-1}\))呢?
代入得到
\(\sum a^xx^j\delta x=\dfrac{a^xx^{\underline{j}}}{a-1}-\sum \dfrac{a^{x+1}}{a-1}jx^{\underline{j-1}}\delta x\)
也就是说
\[{\sum}_0^{n+1} a^xx^j=\frac{a^xx^j}{a-1}\bigg|_{0}^{n+1}-\frac{j\cdot a}{a-1}{\sum}_0^{n+1} a^xx^{\underline{j-1}}\delta x
\]
边界为 \(j=0\) 时,\(\sum a^xx^j\delta x=\sum a^x\delta x=\dfrac{a^x}{a-1}\)。
预处理 \(\Theta(k^2)\) 或 \(\Theta(k\log k)\),递推计算是 \(\Theta(k)\) 的。
综上,我们在 \(\Theta(k^2)\) 或 \(\Theta(k\log k)\) 的复杂度内解决了本题。
类比于无限微积分中高阶导数的概念,我们在有限微积分中也有高阶差分。
我们可以定义 \(f\) 的 \(n\) 阶差分
\[\Delta^n f=
\begin{cases}
f, & n=0 \\
\Delta(\Delta^{n-1} f) & n\gt 0
\end{cases}
\]
我们注意到
\[\mathbf{E}f=f(x+1)
\]
\[\Delta f=f(x+1)-f(x)
\]
所以我们不难得到 \(\Delta=\mathbf{E}-1\)。
于是我们有
\[\Delta^n f=(\mathbf{E}-1)^n f=\sum_{k=0}^n {n\choose k}(-1)^{n-k}\mathbf{E}^k f
\]
\(\mathbf{E}^k\) 类似 \(\Delta^k\) 递归地定义。
求
\[\sum_{i=1}^n i^k a^i
\]
其中 \(\boldsymbol{k\leq 10^7}\)。
设 \(\displaystyle f(n)={\sum}_0^n x^ka^x\delta x\),答案即为 \(f(n+1)-f(1)\)。
注意到在普通版中我们有
\[\begin{aligned}
\sum a^xx^k\delta x&=\dfrac{\textcolor{red}{a^x}x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\textcolor{red}{a^{x}}\sum x^{\underline{k-1}}\delta x \\
&=a^x\left(\frac{x^{\underline{k}}}{a-1}-\frac{a\cdot k}{a-1}\sum x^{\underline{k-1}}\right)
\end{aligned}
\]
\(a^x\) 右边的那一包东西显然是一个 \(k\) 次多项式,不妨设为 \(g(x)\)。则我们有
\[{\sum}_l^r a^xx^k\delta x=a^rg(r)-a^lg(l)
\]
则
\[f(n)=a^ng(n)-a^0g(0)
\]
如果我们能知道 \(g(0),g(1),\cdots,g(n)\) 的点值,就不难应用 Lagrange 插值法在 \(\Theta(k)\) 内求出 \(g(n+1)\)。那么问题转化为如何求 \(g(0),g(1),\cdots,g(n)\)。
我们考虑到
\[f(n)=a^ng(n)-a^0g(0)
\]
即
\[g(n)=\frac{f(n)+g(0)}{a^{n}}
\]
\(f(0),f(1),\cdots,f(k)\) 可以 \(\Theta(k)\) 递推。那么现在的当务之急就是求出 \(g(0)\) 了。
我们知道 \(\deg g=k\),这意味着 \(\Delta^{k+1} g=0\)。
于是
\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}\mathbf{E}^{i}g(0)=0
\]
\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}g(i)=0 \]
\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}[f(i)+g(0)]=0 \]
\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}g(0)=0 \]
\[\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)+(a^{-1}-1)^{k+1}g(0)=0 \]
\[g(0)=-(a^{-1}-1)^{-(k+1)}\sum_{i=0}^{k+1}{k+1\choose i}(-1)^{k+1-i}a^{-i}f(i)
\]
不难 \(\Theta(k)\) 求出。综上我们在 \(\Theta(k)\) 的时间复杂度内解决了本题。
答案即为 \(a^{n+1}g(n+1)-a\cdot g(1)\)
顺便讲一下如何 \(\Theta(k)\) 插值。
注意到我们只需要算 \(g(n+1)\)。
我们有
\[g(n+1)=\sum_{i=0}^{k}g(i)\frac{\prod_{j\neq i}(n+1-j)}{\prod_{j\neq i}(i-j)}\]
分母就是
\[i(i-1)\cdots 2\cdot 1\cdot (-1)\cdot (-2)\cdots (i-k)
\]
即为
\[(-1)^{k-i}i!(k-i)!
\]
分子就是
\[\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{n+1-i}
\]
所以分式即为
\[(-1)^{k-i}\frac{(n+1-0)(n+1-1)\cdots(n+1-k)}{(n+1-i)i!(k-i)!}
\]
可以前后缀预处理做到严格 \(\Theta(k)\)。
定义数列 \(\{a_i\}\) 为
\[a_i=\begin{cases}
1, & i=1 \\
i^k+\displaystyle \sum_{j=1}^{i-1} a_j & i\gt 1
\end{cases}
\]
求出 \(a_n\),对 \((10^9+7)\) 取模。
\(n\leq 10^{18}, k\leq 10\)。
解法 1:倍增
注意到
\[a_1=1^k
\]
\[a_2=2^k+1^k
\]
\[a_3=3^k+\overbrace{(2^k+1^k)}^{a_2}+1^k=3^k+2^k+2\cdot 1^k
\]
\[a_4=4^k+\overbrace{3^k+2^k+2\cdot 1^k}^{a_3}+\overbrace{(2^k+1^k)}^{a_2}+1^k=4^k+3^k+2\cdot 2^k+4\cdot 1^k
\]
\[\begin{aligned}
a_5&=5^k+\overbrace{4^k+3^k+2\cdot 2^k+4\cdot 1^k}^{a_4}+\overbrace{3^k+2^k+2\cdot 1^k}^{a_3}+\overbrace{(2^k+1^k)}^{a_2}+1^k \\
&=5^k+4^k+2\cdot 3^k+4\cdot 2^k+8\cdot 1^k
\end{aligned}
\]
不难找出规律
\[a_n=n^k+\sum_{i=1}^{n-1} 2^{n-1-i}\cdot i^k
\]
考虑计算 \(f(n,k)=\sum_{i=1}^n 2^{n-i}i^k\)。于是答案为 \(n^k+f(n-1,k)\)。
稍微扰动一下。
\[\begin{aligned}
\sum_{i=1}^{n} 2^{n-i}i^k&=2^{n-1}+\sum_{i=2}^{n} 2^{n-i}i^k \\
&=2^{n-1}+\sum_{i=1}^{n-1} 2^{n-i-1}(i+1)^k\\
&=2^{n-1}+2^{-1}\sum_{i=1}^{n-1} 2^{n-i}\sum_{p=0}^k {k\choose p} i^p \\
&=2^{n-1}+2^{-1}\sum_{p=0}^k {k\choose p} \sum_{i=1}^{n-1} 2^{n-i}\cdot i^{p} \\
&=2^{n-1}+2^{-1}\sum_{p=0}^k {k\choose p} f(n-1,p)
\end{aligned}
\]
这样是 \(\Theta(nk)\) 的(比暴力还慢)。我们考虑倍增。
假设 \(n\) 为偶数。
以下设 \(N=\dfrac{n}{2}\)。
\[f(N,k)=(N)^k+2\cdot (N-1)^k+\cdots +2^{N-1}\cdot 1^k
\]
\[\begin{aligned}
f(n,k)&=n^k+2\cdot(n-1)^k+\cdots+{2^{N}(N)^k+2^{N+1}(N-1)^k+\cdots
+2^{N+N-1}\cdot 1^k} \\
&=n^k+2\cdot(n-1)^k+\cdots+2^{N-1}(N+1)^k+2^{N}\cdot f(N,k)
\end{aligned}
\]
那么现在压力给到计算
\[\begin{aligned}
\sum_{i=N+1}^{n}2^{n-i}i^k&=
\sum_{i=1}^{N}2^{n-i-N}(i+N)^k \\
&=\sum_{i=1}^{N} 2^{N-i}\sum_{p=0}^{k} {k\choose p}i^{p}N^{k-p} \\
&=\sum_{p=0}^{k} {k\choose p}N^{k-p} \sum_{i=1}^{N} 2^{N-i}i^{p} \\
&=\sum_{p=0}^k {k\choose p} N^{k-p} f(N,p)
\end{aligned}
\]
于是我们得到
\[f(n,k)=\begin{cases}\displaystyle
2^{N}\cdot f(N,k)+ 2^{n-2N}\sum_{p=0}^k {k\choose p} N^{k-p} f(N,p), & n\equiv 0\pmod 2\\
2\cdot f(n-1,k)+n^k & n\equiv 1\pmod 2
\end{cases}
\]
时间复杂度 \(\Theta(k\log n)\)。
解法 2:Stirling 数
我们知道
\[i^n=\sum_{k=0}^{n} {n\brace k} i^{\underline{k}}
\]
考虑计算
\[\begin{aligned}
f(n,k)&=\sum_{i=1}^n 2^{n-i}i^k \\
&=\sum_{i=1}^n 2^{n-i}\sum_{j=0}^{k} {k\brace j} i^{\underline{j}} \\
&=\sum_{i=1}^n 2^{n-i}\sum_{j=0}^{k} {k\brace j} j!{i\choose j} \\
&=\sum_{j=0}^{k}{k\brace j}j!\sum_{i=j}^{n}
2^{n-i}{i\choose j}
\end{aligned}
\]
令 \(g(x)=\sum_{i=x}^{n} 2^{n-i}{i\choose x}\),考虑扰动。
\[\begin{aligned}
g(m)&=\sum_{i=m}^{n}2^{n-i}{i\choose m} \\
&=2^{n-m}+\sum_{i=m+1}^{n}2^{n-i}{i\choose m}\\
&=2^{n-m}+\sum_{i=m+1}^n 2^{n-i} \left({i+1\choose m+1}-{i\choose m+1}\right) \\
&=2^{n-m}-g(m+1)+\sum_{i=m+1}^{n}2^{n-i}{i+1\choose m+1} \\
&=2^{n-m}-g(m+1)+\sum_{i=m+2}^{n+1} 2^{n-i+1}{i\choose m+1} \\
&=2^{n-m}-g(m+1)+{n+1\choose m+1}+2\sum_{i=m+2}^{n} 2^{n-i}{i\choose m+1} \\
&=2^{n-m}-g(m+1)+{n+1\choose m+1}+2\sum_{i=m+1}^{n} 2^{n-i}{i\choose m+1}-\cdot 2^{n-m}\\
&=g(m+1)+{n+1\choose m+1}
\end{aligned}
\]
我们得到了 \(g\) 的递推式。而 \(g(0)=\sum_{i=0}^n 2^{n-i}=2^{n+1}-1\),于是可以 \(\Theta(n)\) 递推出 \(g\)。
然后只需要预处理第二类 Stirling 数即可,时间复杂度瓶颈在预处理第二类 Stirling 数上,依照实现可以为 \(\Theta(k^2)\) 或 \(\Theta(k\log k)\)。
定义数列 \(\{a_i\}\) 为
\[a_i=\begin{cases}
1, & i=1 \\
i^k+\displaystyle \sum_{j=1}^{i-1} a_j & i\gt 1
\end{cases}
\]
求出 \(a_n\),对 \((10^9+7)\) 取模。
\(\textcolor{red}{n\leq 10^{10^{5}}, k\leq 2\times 10^7}\)。
考虑
\[f(n)=\sum_{i=1}^n 2^{n-i}i^k
\]
如果令 \(a=2^{-1}\) 那么
\[f(n)=2^n \sum_{i=1}^{n} a^ii^k
\]
然后就是 P5907 数列求和加强版 / SPOJ MOON4 了。
注意到我们有 \(n\leq 10^{10^5}\)。于是我们需要维护 \(n\bmod \varphi(p)\) 和 \(n\bmod {p}\) 后的值。
注意本题由于 \(k\leq 2\times 10^7\) 需要卡空间常数。
计算
\[\left(\sum_{k=0}^{n}f(k)\times x^k\times \binom{n}{k}\right)\bmod p
\]
其中 \(n\leq 10^9\),\(m=\deg f\leq \min(n,10^3)\)
我们有结论
\[{n\choose k}k^{\underline{m}}={n-m\choose k-m} n^{\underline{m}}
\]
其实如果你把它换个形式,就是
\[{n\choose k}{k\choose m}={n-m\choose k-m}{n\choose m}
\]
证明:
从 \(n\) 个里面选 \(k\) 个(记为集合 \(A\)),再从 \(k\) 个里面选 \(m\) 个(记为集合 \(B\)),等价于从 \(n\) 个里面选 \(m\) 个(集合 \(B\)),再从 \((n-k)\) 个里面选出 \((m-k)\) 个(\(A\backslash B\))。
于是设 \(f=\sum_{i=0}^m b_i x^{\underline{i}}\),对于每一个单项式,我们有
\[\begin{aligned}
&=b_i \sum_{k=0}^n {n\choose k}k^{\underline{i}} x^k \\
&=b_i{n^{\underline{i}}}\sum_{k=0}^n {n-i\choose k-i}x^k \\
&=b_i\cdot x^i{n^{\underline{i}}}\sum_{k=0}^{n-i}{n-i\choose k} x^k\\
&=b_i\cdot x^i{n^{\underline{i}}}(1+x)^{n-i}
\end{aligned}
\]
其中第三个等号处改为了枚举 \((k-i)\) 的值。
然后考虑转下降幂多项式。
\[\begin{aligned}
\sum_{k=0}^m a_kx^k&=\sum_{k=0}^m a_k\sum_{i=0}^k {k\brace i}x^{\underline{i}} \\
&=\sum_{i=0}^m x^{\underline{i}} \sum_{k=i}^m {k\brace i} a_k
\end{aligned}
\]
于是
\[b_i=\sum_{k=i}^m {k\brace i}a_k
\]
\(\Theta(m^2)\) 预处理第二类 Stirling 数即可。总复杂度 \(\Theta(m^2)\)。
启示:重视基本公式。考虑枚举整体。
记
\[F(x)=\sum_{k=0}^{n}f(k)\binom nkx^k(1−x)^{n−k}
\]
求 \(F(x) \bmod 998244353\)。
\(f\) 由点值形式给出,分别给定了 \(f(0),f(1),\cdots,f(m)\)。
\(n\leq 10^9\),\(m\leq 2×10^4\)。
由上题的启示,考虑拆成下降幂多项式做。
于是
\[\begin{aligned}
&=b_i\sum_{k=0}^n {n\choose k}k^{\underline{i}} x^k (1-x)^{n-k} \\
&=b_in^{\underline{i}}\sum_{k=0}^n {n-i\choose k-i} x^k (1-x)^{n-k} \\
&=b_i n^{\underline{i}} \sum_{k=0}^{n-i}{n-i\choose k}x^{i+k}(1-x)^{n-k-i} \\
&=b_in^{\underline{i}}x^i \sum_{k=0}^{n-i}{n-i\choose k}x^{k}(1-x)^{n-k} \\
&=b_in^{\underline{i}}x^i
\end{aligned}
\]
至于转下降幂多项式,由于题目给定了 \(f(0),f(1),\cdots,f(n)\),令 \(f_i=\dfrac{f(i)}{i!}\),\(g_i=\dfrac{1}{i!}\),则下降幂的系数序列为 \(f\cdot g^{-1}\)。
时间复杂度 \(\Theta(n\log n)\)。
转化题意。不难发现题目给定的事件发生的概率是 \(p=m^{-1}\),并且这是一个非常显然的二项分布的模型。
问题转化为:求 \(\mathbb{E}[x^k]\),即
\[\sum_{i=0}^n i^k{n\choose i}p^{i}(1-p)^{n-i}
\]
暴力推式子。
\[\begin{aligned}
&\sum_{i=0}^n i^k{n\choose i}p^{i}(1-p)^{n-i} \\
=&\sum_{i=0}^np^{i}(1-p)^{n-i}\sum_{j=0}^k{k\brace j} {n\choose i}i^{\underline{j}}
\end{aligned}
\]
我们有组合恒等式 \(\displaystyle {n\choose m}{m\choose r}={n\choose r}{n-r\choose m-r}\),即 \(\displaystyle {n\choose m}\frac{m^{\underline{r}}}{r!}={n-r\choose m-r}\frac{n^{\underline{r}}}{r!}\)
消去 \(r!\),发现就是式子里面的形式,代入得
\[\begin{aligned}
=&\sum_{i=0}^np^{i}(1-p)^{n-i}\sum_{j=0}^k{k\brace j}{n-j\choose i-j} n^{\underline{j}} \\
=&\sum_{j=0}^k{k\brace j}n^{\underline{j}} \sum_{i=0}^np^{i}{n-j\choose i-j}(1-p)^{n-i} \\
=&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} \sum_{i=0}^n{n-j\choose i-j}p^{i-j}(1-p)^{n-i}
\end{aligned}
\]
注意到右边很像一个二项式定理的形式,我们改为枚举 \(i-j\)。那么得到
\[\begin{aligned}
=&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} \sum_{i=0}^{n-j}{n-j\choose i}p^{i}(1-p)^{(n-j)-i} \\
=&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j} (p+1-p)^{n-j} \\
=&\sum_{j=0}^k{k\brace j}n^{\underline{j}}p^{j}
\end{aligned}
\]
预处理 Stirling 数即可在 \(\Theta(k^2)\) 或 \(\Theta(k\log k)\) 内解决本题。
加强版要求线性时间内给出答案。
\[m^n=\sum_{k=0}^{n}{n\brace k}m^{\underline{k}}=\sum_{k=0}^{\textcolor{cyan}{n}} {m\choose k}{n\brace k}k!
\]
令 \(g(m)=m^n\),\(f(k)={n\brace k}k!\)。进行二项式反演,我们得到
\[m^n=\sum_{k=0}^{\textcolor{cyan}{m}} {m\choose k}{n\brace k}k!\iff {n\brace m}=\frac{1}{m!}\sum_{k=0}^m {m\choose k}(-1)^{m-k}k^n
\]
代入原版中最后的式子,得到
\[\begin{aligned}
&\sum_{i=0}^kn^{\underline{i}}p^i\frac{1}{i!}\sum_{j=0}^{i}{i\choose j}(-1)^{i-j}j^k\\
=&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k {i\choose j}\frac{n^{\underline{i}}}{i!}(-p)^i \\
=&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k \textcolor{cyan}{{n\choose i}{i\choose j}}(-p)^i \\
=&\sum_{j=0}^k(-1)^jj^k\sum_{i=j}^k \textcolor{cyan}{{n\choose j}{n-j\choose i-j}}(-p)^i \\
=&\sum_{j=0}^k{n\choose j}(-1)^jj^k\sum_{i=j}^k {n-j\choose i-j}(-p)^i \\
=&\sum_{j=0}^k{n\choose j}(-1)^jj^k\sum_{i=0}^{k-j} {n-j\choose i}(-p)^{i+j} \\
=&\sum_{j=0}^k{n\choose j}(-1)^jj^k(-p)^j\sum_{i=0}^{k-j} {n-j\choose i}(-p)^i
\end{aligned}
\]
令 \(P=-p\),记 \(\displaystyle f(j)=\sum_{i=0}^{k-j}{n-j\choose i}P^i\)。发现瓶颈在这里,考虑怎么快速地递推。
考虑 \(f(j-1)-f(j)\)。
\[\begin{aligned}
f(j-1)-f(j)&=\sum_{i=0}^{k-j+1}{n-j+1\choose i}P^i-\sum_{i=0}^{k-j}{n-j\choose i}P^i \\
&={n-j+1\choose k-j+1}P^{k-j+1}+\sum_{i=0}^{k-j}\left[{n-j+1\choose i}-{n-j\choose i}\right]P^i \\
&={n-j+1\choose k-j+1}P^{k-j+1}+\sum_{i=0}^{k-j}{n-j\choose i-1}P^i \\
&={n-j+1\choose k-j+1}P^{k-j+1}+P\sum_{i=0}^{k-j-1}{n-j\choose i}P^i \\
=&{n-j+1\choose k-j+1}P^{k-j+1}+P\left[f(j)-{n-j\choose k-j}P^{k-j}\right] \\
=&{n-j+1\choose k-j+1}P^{k-j+1}-{n-j\choose k-j}P^{k-j+1}+P\cdot f(j)\\
=&{n-j\choose k-j+1}P^{k-j+1}+P\cdot f(j)
\end{aligned}
\]
反解出
\[f(j)=\frac{1}{1+P}\left[f(j-1)-{n-j\choose k-j+1}P^{k-j+1}\right]
\]
于是可以直接递推,边界是 \(f(0)=1\)。
预处理出阶乘等,我们就在严格 \(\Theta(k)\) 的时间内解决了本题。
给定 \(m\) 次多项式 \(f\) 和有理数 \(r\in (0,1)\),求
\[\sum_{n=0}^{+\infty} f(n)r^n
\]
模 \(998,422,353\)。其中 \(m\leq 10^5\)。多项式以系数形式给出。
考虑对于单项式怎么做。
也就是求
\[\begin{aligned}
\sum_{n=0}^{+\infty} n^kr^n
&=
\dfrac{r^nn^{\underline{k}}}{r-1}-\sum \dfrac{r^{n+1}}{r-1}kn^{\underline{k-1}}\delta
\end{aligned}
\]
单位根反演
很厉害的一个 trick。
引理
\[[k\mid n]=\sum_{d=0}^{n-1} \omega_k^{nd}
\]
参考资料
算法学习笔记(9):二项式反演 - GhostLX
二项式反演 - Meteor
有限微积分 - wangrx