分拆数(?)学习笔记

写这篇文章的原因是完全不会山河重整(然后回顾小 Y 的背包计数问题又发现 EI 的做法无比高级)所以这篇文章其实是用来膜拜 EI 的!赞美太阳!

 


定义建议自行百度搜索

那种搜索分拆集合的主要难点还是不在这里,就不多说了,就贴个跟置换有关的重要式子

$S_n$ 中属于 $(1)^{c_1}(2)^{c_2} \cdots (n)^{c_n}$ 共轭类的元素个数为

$$\frac{n!}{\prod\limits_{i=1}^n c_i! i^{c_i}}$$

证明

 


这篇文章正题还是分拆方案数,先来个模板

分拆数有四种求法,你知道么

第一种就是根号分治的背包,可以看小 Y 的背包计数问题这个题的大部分题解,时间复杂度 $O(n\sqrt{n})$

第二种就拿五边形数定理搞搞

$$\varphi(x)=\prod_{i=1}^{\infin}(1-x^i)=\sum_{k=0}^{\infin}(-1)^kx^{\frac{k(3k \pm 1)}{2}}$$

又因为 $\varphi(x)$ 是分拆数的生成函数 $P(x)=\prod\limits_{i=1}^{\infty}{\frac{1}{1-x^i}}$ 的倒数,故有 $\varphi(x)P(x)=1$

展开一下,因为五边形数小于等于 $n$ 的只有 $O(\sqrt{n})$ 个,直接递推即可,时间复杂度 $O(n\sqrt{n})$

第三种就直接推算一下 $\ln P(x)$ 的系数,然后 $\exp$ 回去即可,因为没写过,不太清楚复杂度,大概是 $O(n\log n)$ ?

第四种在这里,赞美太阳!就是找到 $\text{Ferrers}$ 图像的最大正方形,然后两边剩下的部分是两个小 $\text{Ferrers}$ 图像,也就是

$$P(x)=\sum_{h=1}^{\infin}x^{h^2}(\prod_{i=1}^h\frac{1}{1-x^i})^2$$

这个感觉实现简单又很有拓展性, EI 真的是太强大了! orz

时间复杂度 $O(n\sqrt{n})$ ,常数极小,评测链接

所以之前那题,也可以容斥再加分拆数,又短又快,评测链接

 


AHOI2022 山河重整

有个比较显然的转化,合法的条件可以看作 $\forall i \in [1,n] \cap \N,\sum\limits_{j \in S,j \le i} j \ge i$

正难则反,考虑拿总方案减去不合法的,为了防止算重,我们可以计算 $f_i$ 为最小的 $i$ 使得条件不成立,不是很直观?有一个明显的性质,那就是 $i-1$ 一定是满足条件的,那么我们可以更改定义改为 $f_i$ 是 $\forall j \in [1,i] \cap \N$ 都满足条件的方案数,那么答案就是 $\sum\limits_{i=0}^{n-1}f_i 2^{n-i-1}$

如果没有条件,那么方案数就是每个数只能选至多一个的分划数,生成函数是

$$G(x)=\prod_{i=1}^{\infty}(1+x^i)=\sum_{i=1}^{\infty} g_i x^i$$

容斥一下,相当于是减掉 $i$ 之前有不合法的情况,如果是 $j+1$ 第一个不合法,要减去的数就是 $f_j$ 乘上从 $[j+2,i]$ 中选数加起来为 $i-j$ 的方案数,所以有递推式

$$f_i=g_i-[x^i]\sum_{j=0}^{i-1} f_j x^j\prod_{k=j+2}^{\infty}(1+x^k)$$

我们来试试推一推形如 $G(x)$ 这样的生成函数

这个也可以像第四种方法一样,从类 $\text{Ferrers}$ 图像考虑

 

我们找到最大的斜三角,设其长度为 $h$ (其实容易发现 $h$ 就是这张图的宽度)

我们把其删掉然后上端对齐,容易发现那么剩下的就变成了 $n-\frac{h(h+1)}{2}$ 的 $\text{Ferrers}$ 图像,但宽度不能超过 $h$ ,所以就有式子

$$\prod_{i=1}^{\infty}(1+x^i)=\sum_{h=1}^{\infty}x^{\frac{h(h+1)}{2}}\prod_{i=1}^h\frac{1}{1-x^i}$$

可以用类似的推导推出

$$\prod_{i=k+1}^{\infty}(1+x^i)=\sum_{h=1}x^{kh} \cdot x^{\frac{h(h+1)}{2}}\prod_{i=1}^h\frac{1}{1-x^i}$$

于是前面的递推式就可以写成

$$f_i=g_i-[x^i]\sum_{j=0}^i f_j x^j\sum_{h=1}^{\infty}x^{(j+1)h} \cdot x^{\frac{h(h+1)}{2}}\prod_{k=1}^h\frac{1}{1-x^k}$$

发现有贡献的 $j$ 必定小于 $\frac{i}{2}$ ,所以像先递归解决小于等于 $\frac{n}{2}$ 的,然后倒着枚举 $h$ ,一个一个加入然后每次多乘个 $\frac{1}{1-x^h}$ 就行了

评测链接

UPD. 更优的复杂度:(sto EI orz)

 


「2017 山东一轮集训 Day7」逆序对

思路来自这里\(\text{EI}\) 天上第一!

众所周知排列逆序对数可以用个生成函数来表示

\[\prod_{i=1}^{n}\big(\sum_{j=0}^{i-1}x^j\big)=\frac{\prod\limits_{i=1}^{n}(1-x^i)}{(1-x)^n} \]

这里我们要求 \(x^k\) 的系数,由于 \(k\) 可以大于 \(n\) ,所以貌似不能使用五边形数定理

先忽略简单的分母,我们只考虑如何计算分子,可以发现其实这就是高斯二项式系数相关(其实貌似上面的式子都能用这玩意解决),具体的学习笔记可能以后会有?(现在是贺的)我们定义

\[(a;q)_n=\prod_{i=0}^{n-1}(1-aq^i) \]

有高斯二项式定理(也叫 q-二项式定理 ):

\[(a;q)_n=\prod_{i=0}^{n-1}(1-aq^i)=\sum_{i=0}^n a^i q^{\tbinom{i}{2}}\binom{n}{i}_q \]

所以分子可以改写为

\[\prod_{i=1}^n(1-x^i)=(x;x)_n=\sum_{i=0}^n (-1)^i x^{\frac{i(i+1)}{2}}\binom{n}{i}_x \]

\(\binom{n}{k}_x\) 有定义

\[\binom{n}{k}_x=\frac{\prod\limits_{i=1}^n(1-x^i)}{\prod\limits_{i=1}^k(1-x^i)\prod\limits_{i=1}^{n-k}(1-x^i)}=\binom{n}{k-1}_x\frac{1-x^{n-k+1}}{1-x^k} \]

因为下指标最多只要求到 \(O(\sqrt{k})\) ,暴力递推即可,时间复杂度 \(O(k\sqrt{k})\)

评测链接

 


 

咕咕咕~

posted @ 2022-05-11 08:34  一叶知秋‘  阅读(98)  评论(2编辑  收藏  举报