(七)数学

组合数学

\(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)\) 即可,然后后面的数就可以迭代填出。

评测记录

posted @ 2022-10-16 14:01  mklzc  阅读(70)  评论(0编辑  收藏  举报