20240813:组合计数选做

P3214 [HNOI2011] 卡农

题意:\(m\) 个集合,\(n\) 种元素,求集合间互不相同且每种元素出现偶数次的方案数。

题目等价于从 \(1 \sim 2^n - 1\) 里选出 \(m\) 个不同的数,使他们异或和为 \(0\)

不妨对每个数标号,由于互不相同,最后除以 \(m!\) 即可。

\(f_i\) 表示前 \(i\) 个数异或和为 \(0\) 的合法方案数。

显然 \(a_i = \bigoplus_{j = 1}^{i - 1} a_j\),对于前 \(i - 1\) 个数的每种选法都唯一对应一个 \(a_i\),即 \(f_i \gets (2^n - 1)^{\underline{i - 1}}\)

非法方案有两种:

  • \(a_i = 0\)。等价于 \(\bigoplus_{j = 1}^{i - 1} a_j = 0\),即 \(f_{i - 1}\)

  • \(a_i\) 等于某个 \(a_j\ (j < i)\)

    也就是剩下的 \(i - 2\) 个人异或和为 \(0\),对应 \(f_{i - 2}\)

    枚举 \(j\) 的位置和 \(a_j\) 是哪个,乘上 \((i - 1) \times (2^n- i + 1)\) 的系数。

评黑确实不够格(好的他蓝了)。submission

P3330 [ZJOI2011] 看电影

题意:

\(n\) 个人 \(k\) 个座位,每个人初始随机被分配一个座位 \(i\),如果 \(i\) 上有人就去 \(i + 1\) 直到 \(k\),如果 \(k\) 也有人这个人只能站着。

求每个人都有座位的概率。

特判 \(n < k\) 概率为 \(0\)

我们在 \(k\) 后面新增一个位置 \(k + 1\),并与位置 \(1\) 相连形成一个 \(k + 1\) 的环。

不给环标号,不同的方案为 \((k + 1)^{n - 1}\)

由于 \(n < k + 1\),所以任意一种方案在环上走都能使所有人都有位置。

在最终状态里,找到一个没有人的位置当做 \(k + 1\),并由此断开,钦定方向标为 \(1 \sim k\),对应一种合法情况。

因此一种方案能生成 \(k + 1 - n\) 个不同的序列。

由于我们可以序列还原到 \(k + 1\) 的环,因此不存在不同的环生成同一序列。

答案等于

\[\dfrac{(k + 1)^{n - 1}\times (k + 1- n)}{k^n} \]

题目要求输出分数,由于 \(k\perp k + 1\),因此只需考虑 \(k\)\(k + 1 - n\) 的公因数,不需要高精除。

submission

P6620 [省选联考 2020 A 卷] 组合数问题

题意:给定 \(f(k) = a_0 + a_1k + \cdots a_mk^m\),求

\[\sum_{k=0}^{n}f(k)\times x^k\times \begin{pmatrix}n\\k\end{pmatrix} \]

其中 \(n \le 10^9, m \le \min(n, 1000)\)

\[\begin{aligned} = &\sum_{k=0}^{n} \sum_{i = 0}^ma_i k^i\times x^k\times \begin{pmatrix}n\\k\end{pmatrix}\\ \\ =&\sum_{i = 0}^m a_i \sum_{k=0}^{n} \sum_{j = 0}^i \begin{Bmatrix}i\\j\end{Bmatrix} k^{\underline{j}} x^k\begin{pmatrix}n\\k\end{pmatrix} \\ \\ =&\sum_{i = 0}^m a_i \sum_{j = 0}^i \sum_{k=j}^{n}\begin{Bmatrix}i\\j\end{Bmatrix} k^{\underline{j}} x^k\dfrac{n^{\underline{j}}(n - j)!}{k^\underline{j}(k - j)!(n - k)!}\\ \\ =&\sum_{i = 0}^m a_i \sum_{j = 0}^i \begin{Bmatrix}i\\j\end{Bmatrix} n^{\underline{j}}x^j \sum_{k=j}^{n} x^{k - j}\begin{pmatrix}n - j\\k - j\end{pmatrix}\\ \\ =&\sum_{i = 0}^m a_i \sum_{j = 0}^i \begin{Bmatrix}i\\j\end{Bmatrix} n^{\underline{j}}x^j(x + 1)^{n - j} \ \end{aligned} \]

里面所有东西都能预处理,\(O(m^2)\) 直接算。

submission

P3160 [CQOI2012] 局部极小值

题意:

\(n \times m\) 的矩阵,\(1 \sim n\times m\) 每个数恰好出现一次,\(n \le 4, m \le 7\)

如果一个格子是他的八联通里的最小值,则称这个位置为局部最小值。

给定 \(n \times m\) 的网格,x 表示局部最小值,. 表示非局部最小值,求符合条件的矩阵数量。

局部最小值的数量很少,\(4 \times 7\) 的网格最多 \(8\) 个。

从小到大填数。

\(f(i, s)\) 表示当前在填 \(i\),局部最小值的状态为 \(s\)(有没有填过)的合法方案。

我们发现一个局部最小值没填的时候他周围都不能填。

\(i\) 填局部最小值 \(x\)\(f(i, s \cup x) \gets f(i - 1, s)\)

\(i\) 不填局部最小值:\(f(i, s) \gets f(i - 1, s) \times \big(cnt_s - (i - 1 - \vert s\vert)\big)\)

其中 \(cnt_s\) 表示状态为 \(s\) 时可填的非局部最小值。

单次 dp 复杂度 \(O(2^8nm)\)

但是这样只满足了 x 的位置是局部最小值,并没有保证 . 的位置不是局部最小值。

性质 \(a_{i}\) 表示 \(i\) 这个位置是局部最小值,\(N(a_i)\) 表示满足这个条件的方案数。

上述 dp 可以求出任意 \(N(\prod a_i)\)

令所有局部最小值的集合为 \(S\),则答案可以表示为

\[N\bigg(\prod_{i \in S} a_i \prod_{i \notin S} (1 - a_i)\bigg) \]

把后面的多项式展开成容斥形式:

\[\sum_{T \subseteq \complement_US} (-1)^{\vert T \vert} \times N\bigg(\prod_{i \in S\cup T} a_i \bigg) \]

合法状态很少,直接深搜枚举所有的 \(T\)

submission

P3270 [JLOI2016] 成绩比较

题意:\(n\) 个人 \(m\) 门课,\(i\)\(j\) 碾压定义为每门分数都不超过 \(j\)

所有人第 \(i\) 门课的成绩在 \(1 \sim U_i\) 之间。

给出其中 B 每门课的排名 \(r_i\)(分数严格大于他的人数 $ + 1$),求他恰好碾压 \(k\) 个人的情况数。

先选出 \(k\) 个人被 B 碾压,方案数为 \(\begin{pmatrix}n - 1\\k\end{pmatrix}\)

剩下的 \(n - k - 1\) 个人都必须满足至少一门课的分数大于 B。

很容易求出至多 \(x\) 个人不被 B 碾压的方案 \(\begin{pmatrix} n - k - 1\\ x\end{pmatrix}\prod \begin{pmatrix} x\\ r_i - 1\end{pmatrix}\)

那么恰好 \(n - k - 1\) 个人不被碾压的方案减还要减去恰好 \(0, 1, \cdots, n - k - 2\) 个人的方案。

直接递推或者容斥都能解决。

接下来要分配每个人的成绩,每门课相互独立,最后相乘即可。

枚举 B 的分数:

\[\begin{aligned} &\prod_{i = 1}^m \sum_{x = 1}^{U_i} x^{n - r_i}(U_i - x)^{r_i - 1}\\ \\ =&\prod_{i = 1}^m \sum_{x = 1}^{U_i} x^{n - r_i}\sum_{j = 0}^{r_i - 1} \begin{pmatrix}r_i - 1\\ j\end{pmatrix}(-1)^jx^j \times U_i^{r_i - j - 1}\\ \\ =&\prod_{i = 1}^m \sum_{j = 0}^{r_i - 1}(-1)^j\begin{pmatrix}r_i - 1\\ j\end{pmatrix} U_i^{r_i - j - 1}\sum_{x = 1}^{U_i} x^{n + j - r_i} \end{aligned} \]

后面那个东西直接插出来。时间复杂度 \(O(n^2m)\)

对于 \(n\) 次多项式 \(f(x)\),如果已知他的 \(n + 1\) 个点值 \((x_i, y_i)\),则

\[f(x) = \sum_{i = 1}^{n + 1} y_i \prod_{j \ne i} \dfrac{x - x_j}{x_i - x_j} \]

\(f(x) = \sum_{i = 1}^x i^t\) 是关于 \(x\)\(t + 1\) 次多项式。

\(x_i = i\ (i \le t + 2)\),预处理可以做到 \(O(t)\) 求值。

submission

P7213 [JOISC2020] 最古の遺跡 3

题意:\(2n\) 个柱子,\(1 \sim n\) 种高度每个出现两次。

\(n\) 次地震,每次地震使 \(h_i \to h_i - 1\),当且仅当 \(i\) 后面有一根相同高度的柱子。

给定地震过后仅存的 \(n\) 个位置 \(A_1, A_2, \cdots, A_n\),求初始高度序列的方案数。

从后往前挨个震 \(n\) 次和上述操作是等效的。

考虑一个位置 \(i\)\(i\) 后面的高度集合一定只增不减(指集合元素)。

相同高度的柱子中位置最靠后的一定会被保留,也就是一种高度一旦出现不会消失。

由于 \(i\) 对后面的柱子没有影响,因此无论是全部震完之后 \(h_i\) 再减小还是和后面的柱子同步减小都是等效的。

任意时刻最多两个柱子高度相同,如果 \(t\) 时刻 \(h_i = h_j = h_k\),则 \(t - 1\) 时刻也存在 \(h_i = h_j = h_{k'}\),这与 \(t = 0\) 时矛盾。

不难发现在第 \(i\) 次操作后 \(1\sim n−i\) 每个数出现两次,\(n−i+1∼n\) 每个数出现一次,可以借助上条结论归纳。

也就是每次的两个 \(1\) 总有一个会变成 \(0\)

因此震 \(n\) 次和震无数次是一样的,且 \(n\) 次过后 \(1 \sim n\) 各剩一个。

\(h_i\) 会消失,当且仅当最终序列的后缀 \(i + 1\) 里出现 \(1 \sim h_i\) 的每个元素。

定义 \(h_i\) 为当前序列的高度阈值(极大),所有 \(h \in [1, h_i]\) 都会消失,反之保留。

\(f_{i, j}\) 表示后缀 \(i\) 高度阈值为 \(j\) 的方案数。

\(c_0\) 表示后 \(i−1\) 个柱子中钦定消失的数量,\(c_1\) 为钦定存在的数量。

不妨先区分相同高度的两根柱子,最后除以 \(2^n\)

  • \(i\) 位置钦定消失,阈值不变。

    \(2j\) 种可用高度里,有 \(j\) 个分给 \(j\)标准柱(即被保留的 \(1 \sim j\)),还有 \(c_0\) 个已经分配,那么 \(f_{i, j} \gets (j - c_0) \times f_{i - 1, j}\)

  • \(i\) 位置钦定保留。

    \(h_i^{'}\) 表示当前柱子的最终高度。

    如果 \(h_i^{'} > j + 1\),则高度阈值不变,\(f_{i, j} \gets f_{i -1, j}\),后续再考虑其真实高度。

    如果 \(h_i^{'} = j + 1\),那么就需要确定前面遗留的 \(h > j + 1\) 的真实高度。

    枚举新阈值 \(k\),从 \(f_{i - 1, j}\) 转移到 \(f_{i, k}\)

    确定转移系数。

    选定标准柱的位置:\(\begin{pmatrix}c_1 - j\\k - j - 1\end{pmatrix}\)

    当前柱子的初始高度(最后降到 \(j + 1\)):\(k - j + 1\)(高度只能在 \([j + 1, k]\),标准柱 \([j + 2, k]\) 各用一根)。

    确定 \(j + 2\sim k\) 是如何生成的:\(g_{k - j - 1}\)

    \(g_i\) 表示 \(2i\) 个数(123344...ii)中选出 \(i\) 个,并在地震后能形成 \(1 \sim i\) 的方案数(对应上文从 \([j + 2, k]\) 各两根,震出 \(j + 2 \sim k\))。

    类似 \(f\) 的转移,我们枚举第一个位置的最终高度 \(j\)

    \[g_i = \sum_{j = 1}^i\begin{pmatrix}i - 1\\j - 1\end{pmatrix} (i - j + 2) \times g_{j - 1} \times g_{n - j} \]

    选高度为 \([1, j - 1]\) 会被震成 \(0\),剩下 \([j + 1, n]\) 的柱子各被用掉一根,因此第一个位置有 \((i - j + 2)\) 种选择。

submission

【清华集训2014】主旋律

P2595 [ZJOI2009] 多米诺骨牌

弃疗。

P4451 [国家集训队] 整数的lqp拆分

题意:\(1\le n\le 10^{100000}\),求

\[\sum_{a_1 + a_2 + \cdots + a_m = n}\prod_{i = 1}^m f_{a_i} \]

其中 \(f_0 = 0, f_1 = 1, f_i = f_{i - 1} + f_{i - 2}\)

构造形式幂集数 \(F(x) = \sum_{i \ge 0} f_i x^i = \dfrac{x}{1 - x - x^2}\)

\(m\) 恰好等于 \(k\) 的答案为 \([x^n] F(x)^k\)

那么答案的生成函数等于 \(G(x) = \sum_{k \ge 1} F(x)^k\)

\[\begin{aligned} G(x) &= F(x) + F(x)^2 + \cdots= F(x) + F(x)G(x)\\ \\ G(x) &= \dfrac{x}{1 - 2x - x^2} \\ \\ &= x(\dfrac{c}{1 - ax} + \dfrac{d}{1 - bx} )\\ \\ &= \sum_{i \ge 1} (ca^{i - 1} + db^{i - 1})x^i \end{aligned} \]

解得

\[\begin{cases} a = 1 + \sqrt 2\\ \\ b = 1 - \sqrt 2\\ \\ c = \dfrac{2 + \sqrt 2}{4}\\ \\ d = \dfrac{2 - \sqrt 2}{4}\\ \end{cases} \]

\(\sqrt 2\) 在模 \(10^9 + 7\) 下有二次剩余 \(59713600\)

\[g_n = \dfrac{\sqrt 2}{4}\bigg((1+\sqrt 2)^{n}-(1-\sqrt 2)^{n}\bigg) \]

P4091 [HEOI2016/TJOI2016] 求和

P2490 [SDOI2011] 黑白棋

P3235 [HNOI2014] 江南乐

posted @ 2024-08-13 16:22  Lu_xZ  阅读(18)  评论(0)    收藏  举报