(七)数学
组合数学
例 \(1.1\):[ZJOI2010]排列计数 - 洛谷
问题可以转化为求节点标号为 \(1\sim n\) 且满足小根堆性质的完全二叉树的数量。
设节点 \(u\) 的两个儿子的标号分别为 \(2u, 2u+1\) 。
由于二叉树的形态已经确定,考虑进行转移。
设 \(F[x]\) 表示以 \(x\) 为根的子树满足题述条件的数量,\(sz(x)\) 表示以 \(x\) 为根的子树的大小。
于是 \(F[u] = \binom{sz(2u)}{sz(u) - 1} F[2u] + F[2u + 1]\) 。递归计算即可。
例 \(1.2\):changing - 洛谷
思考了半天。也没想出什么来,考虑直接手动模拟找规律,将每一时刻灯的变化视为与相邻一个数异或。
考察第一个灯的状况,如下表:
\(a_1\) | \(a_2\) | \(a_3\) | \(a_4\) | \(a_5\) | |
---|---|---|---|---|---|
1 | 1 | 1 | 0 | 0 | 0 |
2 | 1 | 2 | 1 | 0 | 0 |
3 | 1 | 3 | 3 | 1 | 0 |
4 | 1 | 4 | 6 | 4 | 1 |
上表列出了第一个灯在每一时刻中每盏灯分别被异或了多少次,惊喜地发现与杨辉三角很相似。以此类推到第 \(k\) 个灯。
于是问题变成了求组合数的奇偶性,用 \(n~\&~m ==m\) 判断 \(\binom{n}{m}\) 的奇偶性即可。
例 \(1.3\):树的计数 - 洛谷
对于无标号图的计数,考虑 \(prufer\) 序列。
注意到 \(prufer\) 序列的性质:在 \(prufer\) 序列中,顶点出现的次数就是其度数 \(-1\) 。于是,可以直接利用多重集的排列数得出结论:
\(\displaystyle ans = \frac{(n-2)!}{(d_1-1)(d_2-1)\dots (d_n-1)}\)
由于 \(n\le 150\) ,考虑对上下分解质因数进行计算。
例 \(1.4\):[MtOI2018]情侣?给我烧了! - 洛谷
设 \(G_K\) 表示恰好选择 \(k\) 对情侣坐在一排的方案数(\(k\) 对情侣已经确定),
\(F_k\) 表示钦定 \(k\) 对情侣坐在一排的方案数,
设任意 \(k\) 对情侣坐在一排的方案数(待求答案)为 \(ans_k\) 。
那么有 \(\displaystyle ans_k={n\choose k}^2\times k!\times 2^k\times D_{n-k}\)
即 座位选择 \(\times\) 情侣选择座位之间的排列 \(\times\) 情侣二人之间互换位置 \(\times\) 剩下 \(n-k\) 对情侣都不在座位上的"错排"
\(D_n\) 表示 \(2n\) 个座位,\(n\) 对情侣都不坐一起的方案数,显然 \(D_n\) = \(G_0\),
易知 \(F_k={n\choose k}^2\times k!\times 2^k\times (2(n-k))!\)
因为 \(F_k=\sum_{i=k}^{n}{{i\choose k}G(k)}\) ,(\(i\choose k\) 表示 \(i\) 对情侣选出确定的 \(k\) 对)。
观察到上式是二项式反演的标准形式之一,于是有:
\(G_k=\sum_{i=k}^{n}{(-1)^{i-k}}{i\choose k}F_i\)
解得: \(D_n=G_0=\sum_{i=0}^{n}{(-1)^{i}{n\choose i}^2}\times i!\times 2^i\times (2(n-i))!\) 。
带入原式 \(ans_k\) 即可。
最终解得:
\(ans_k={n\choose k}^2\times k!\times 2^k\times D_{n-k}\)
\(D_n=\sum_{i=0}^{n}{(-1)^{i}{n\choose i}^2}\times i!\times 2^i\times (2(n-i))!\)
例 \(1.5\):情侣?给我烧了(加强版)
上道题已经推出了一个柿子:
\(D_n=\sum_{i=0}^{n}{(-1)^{i}{n\choose i}^2}\times i!\times 2^i\times (2(n-i))!\)
再进一步展开:\(\displaystyle D_n=(n!)^2\sum_{i=0}^{n}{\frac{(2n-2i)!\times (-2)^i}{(n-i)!\times i!}}\)
这不就是卷积的形式吗?
设
\(\displaystyle F(x)=\sum_{i=0}^{n}{\frac{(2n-2i)!\times (-2)^i}{(n-i)!\times i!}x^i},G(x)=\sum_{i=0}^{n}{\frac{(-2)^i}{i!}x^i}=e^{-2x},H(x)=\sum_{i=0}^{n}{\frac{(2i)!}{(i)!^2}x^i}={2i\choose i}x^i=\dots~\dots\)
\(\to F=G\ast H\)
额,\(H(x)\) 确实有点难搞啊。
小小的变换一下形式 \(\displaystyle H[n]={2n\choose n}={\frac{(2n)!}{(2^{n}n!)2^{n}n!}\times 4^n}=\frac{(2n-1)(2n-3)\dots 1}{2^n\times n!}\times 4^n={n-\frac{1}{2}\choose n}\times 4^n\)
这就很愉快了,于是 \(H(x)=(1-4x)^{-\frac{1}{2}}\)
求出 \(\displaystyle F(x)=\frac{e^{-2x}}{\sqrt{1-4x}}\)
然后对 \(F(x)\) 进行求导,得到 \(\displaystyle F'=\frac{8x\times e^{-2x}}{(1-4x)^{-\frac{3}{2}}}\)
用 \(F'\) 表示 \(F\) 可以得到 \(\displaystyle F'(x)=\frac{8x}{(1-4x)}F(x)\to F'(x)=4xF'(x)+8xF(x)\)
该式在 \(x^n\) 处具有恒等关系:\(F'[n]=4F'[n-1]+8F[n-1]\)
积分回去:\((n+1)F[n+1]=4nF[n]+8F[n-1]\)
带入关系式 \(\displaystyle F[n]=\frac{D_n}{n!}\) ,有 \(D_{n+1}=4n(n+1)D_n+8n^2(n+1)D_{n-1}\)
整理一下 \(ans_k={n\choose k}^2\times k!\times 2^k\times D_{n-k}\)
\(D_{n+1}=4n(n+1)D_n+8n^2(n+1)D_{n-1}\)
\(O(n)\) 预处理处所有的 \(D\),然后对于每个询问,可 \(O(1)\) 计算 \(ans_k\) 。
总时间复杂度 \(O(N+T)\)
例 \(1.6\):[TJOI2019]唱、跳、rap和篮球 - 洛谷
为了方便表示,设唱,跳,\(rap\) ,篮球分别为 \(1,2,3,4\) 。
简单的排列计数问题却添上了**的限制,于是考虑容斥。
设 \(F[k]\) 表示恰好有 \(k\) 个位置满足有连续的1,2,3,4 。
\(G[k]\) 表示钦定有 \(k\) 个位置满足有连续的1,2,3,4 。
于是 \(G[k]=\sum_{i=k}{{i\choose k}{F[i]}}\)
二项式反演后得到 \(F[k]=\sum_{i=k}{(-1)^{i-k}{i\choose k}G[i]}\)
容易发现,\(F[0]\) 就是我们要找的答案,\(F[0]=\sum_{i=0}{(-1)^{i}G[i]}\)
考虑如何求 \(G[i]\):
若设 \(S(a,b,c,d,n)\) 为 \(n\) 个数 \(1,2,3,4\) 分别不出现超过 \(a,b,c,d\) 次,任意排列的方案数。
于是可以得到 \(G[i]={n-3i\choose i}S(a-i,b-i,c-i,d-i,n-4i)\)
\(\binom{n-3i}{i} \) 是由于选一个球相当于选 \(4\) 个球,这样可能仍然令人疑惑,
考虑这样一个事情,先从 \(n\) 个数删去 \(3i\) 个,选择 \(i\) 个后,再将选择的球后面插入 \(3\) 个球。
代 \(G[i]\) 入原式得 \(F[0]=\sum_{i=0}^{d}{(-1)^i\binom{n-3i}{i}S(a-i,b-i,c-i,d-i,n-4i)}\)
其中 \(d=\min\{\frac{n}{4}, a, b, c, d\}\),表示最多能有的连续 1,2,3,4 的数目。
\(S(a,b,c,d,n)\) 就可以很轻松的用 \(EGF\) 搞定了。
即是:\(\displaystyle \sum_{i=0}^{a}{\frac{x^i}{i!}}\times \sum_{i=0}^{b}{\frac{x^i}{i!}}\times \sum_{i=0}^{c}{\frac{x^i}{i!}}\times \sum_{i=0}^{d}{\frac{x^i}{i!}}\) \(x^n\) 的系数。
由于 \(S(a,b,c,d,n)\) 中 \(k\) 是连续性变化的,于是可以根据 \(S(a-1,b-1,c-1,d-1,n-4)\) 的情况递推到。
即:设 \(\displaystyle R_k=\sum_{i=0}^{k}{\frac{x^i}{i!}}\)
于是有 \(\displaystyle R_a\times R_b=R_{a-1}\times R_{b-1}+R_a\times \frac{x^b}{b!}+R_b\times \frac{x^a}{a!}\)
递推即可。
初等数论
例 \(2.1\):[SHOI2015]超能粒子炮·改 - 洛谷
对原式使用 \(Lucas\) 定理,可以得到:
\(\displaystyle \to\sum_{i=0}^{k}{\binom{n/p}{i/p}\binom{n\bmod p}{i\bmod p}}\)
\(\displaystyle \sum_{i=0}^{k}{[i\bmod p==0]\binom{n/p}{i/p}}\sum_{j=0}^{p-1}{\binom{n\bmod p}{j}}+\binom{n/p}{k/p}\sum_{j=0}^{k\bmod p}{\binom{n\bmod p}{j}}\)
整理一下得到:
\(\displaystyle\sum_{i=0}^{\lfloor\frac{k}{p}\rfloor-1}{\binom{n/p}{i}}\sum_{j=0}^{p-1}{\binom{n\bmod p}{j}}+\binom{n/p}{k/p}\sum_{j=0}^{k\bmod p}{\binom{n\bmod p}{j}}\)
若设 \(F(n, k)\) 表示 \(\displaystyle \sum_{i=0}^{k}{\binom{n}{i}}\) ,则上式可以表示为:
\(F(n,k)=\displaystyle F(\lfloor \frac{n}{p}\rfloor, \lfloor\frac{k}{p}\rfloor-1)\times F(n\bmod p,p-1)+\binom{n/p}{k/p}\times F(n\bmod p, k\bmod p)\)
用 \(Lucas\) 定理计算 \(\displaystyle \binom{n/p}{k/p}\) ,递归计算 \(F(n,k)\) 即可。
例 \(2.2\):小A与两位神仙 - 洛谷
观察模数 \(p\) 的性质:为奇素数的幂,即有原根(设为 \(g\))。
又 \(x, y\) 与 \(p\) 互质,\(x, y\) 可以被唯一表示成 \(g^b\) 和 \(g^c\) 的形式。
于是原方程化为 \(g^{ab}\equiv g^c\pmod p\)
根据指标的相关性质,得到 \(ab\equiv c\pmod{\varphi(p)}\)
由裴蜀定理可知,该方程当且仅当 \((b, \varphi(p))\mid (c, \varphi(p))\) (因为 \((b, \varphi(p))\mid \varphi(p)\) 且 \((b, \varphi(p))\mid c\))。
有如下结论:\(\displaystyle \gcd(b, \varphi(p))=\frac{\varphi(p)}{\mathrm{ord_p}(g^b)}\) 。
考虑证明。
考察集合 \(\{g^{b}, g^{2b}, g^{3b}\dots\}\) 的性质。
在一个大小为 \(\varphi(p)\) 的环上,每次跳 \(b\) 步,\(\displaystyle \frac{\varphi(p)}{\gcd(b, \varphi(p))}\) 步后会回到原点。
又该集合的大小恰好就是 \(g^b\) 的阶,于是 \(\displaystyle \mathrm{ord_p}(g^b)=\frac{\varphi(p)}{\gcd(\varphi(p), b)}\)
变换一下,结论得证。
于是问题转化为判断:\(\mathrm{ord(y)}\mid \mathrm{ord(x)}\) 。
使用 \(pollard-prho\) 快速求阶即可。具体地,确定一个变量 \(d\) ,赋予初值 \(\varphi(p)\) 。考虑到性质 :\(x^e\equiv 1\pmod p\to x^{de}\equiv 1\pmod p\) 。
每次将 \(a\) 除以一个它自身的某一个因子,直到 \(x^a\not \equiv 1\pmod p\) 或 \(a\) 为素数时停止。
杂题
例 \(3.1\):函数 - 洛谷
可以发现性质 \(g(f^m(x))=f^m(g(x))\) 。
若设左侧 \(x\) 所在环大小为 \(size(x)\) ,右侧 \(g(x)\) 所在环的大小为 \(size(gx)\) 。
可以得到,\(size(gx)\mid size(x)\) 。
这是因为左侧下标呈循环,右侧的值呈循环,若环的大小不满足 \(size(gx)\mid size(x)\) ,必然会出现矛盾。
于是我们首先 \(O(n)\) 求出每个环的大小,枚举约数计算最小满足条件的 \(g(x)\) 即可,然后后面的数就可以迭代填出。