2024.6 做题记录
395. CF717A Festival Organization & P5320 [BJOI2019] 勘破神机
就是要计算:
其中 \(f_i\) 为斐波那契数列的第 \(i\) 项。
用第一类斯特林数把下降幂拆成普通幂后,利用 \(f_i\) 的通项公式计算即可。
396. square869120Contest #3 G Sum of Fibonacci Sequence
特判 \(n = 1\)。将 \(n, m\) 都减 \(1\),答案即为
若能把这个分式拆成 \(\frac{A(x)}{(1 - x)^n} + \frac{B(x)}{1 - x - x^2}\) 的形式,其中 \(\deg A(x) \le n - 1, \deg B(x) \le 1\),那么答案就是好算的。
先考虑怎么求出一组合法的 \(A(x), B(x)\),满足 \(A(x)(1 - x - x^2) + B(x)(1 - x)^n = 1\)。因为 \(\deg B(x) \le 1\) 所以它比较好求,所以先求 \(B(x)\)。前面那个式子可以看成是对所有 \(x\) 都成立,那么我们代入 \(1 - x - x^2\) 的两个根 \(x_1 = \frac{-1 - \sqrt 5}{2}\) 和 \(x_2 = \frac{-1 + \sqrt 5}{2}\),得到:
因为 \(\deg B(x) \le 1\) 所以这样可以直接解出 \(B(x)\)。
注意我们现在讨论的都是实数,实现时可以把每个数都用 \(a + b \sqrt 5\) 表示,封装一个结构体即可。
解出 \(B(x)\) 后可以解 \(A(x)\):
因为能除尽,所以可以直接暴力大除法。
那么此时答案即为:
先看左半部分:
组合数可以 \(O(n)\) 预处理前缀积和后缀积后 \(O(1)\) 计算。
再看右半部分(\(f_m\) 为斐波那契数列的第 \(m\) 项):
\(f_n\) 可以直接套通项公式计算:
那么这题就做完了。时间复杂度 \(O(n + \log m)\)。
397. BZOJ4671 异或图
设 \(f_i\) 为钦定 \(i\) 个集合两两无边的方案数(即钦定有 \(i\) 个连通块的方案数),设 \(g_i\) 为恰好有 \(i\) 个连通块的方案数,则:
根据斯特林反演,得:
所以:
问题转化为求 \(f_i\)。
发现 \(n\) 很小,考虑直接枚举哪些点被分到了一个集合(这里的枚举量是贝尔数级别的),设有 \(m\) 个集合。那么每一条两端所属集合不同的边都必须被选偶数次。
设编号为 \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, k}\) 的图包含第 \(i\) 条两端所属集合不同的边,\(a_i\) 为第 \(i\) 个图是否在子集中,那么会得到一个形如 \(\forall i, a_{b_{i, 1}} \oplus a_{b_{i, 2}} \oplus \cdots \oplus a_{b_{i, k}} = 0\) 的异或方程组,高斯消元求其自由元个数 \(c\),那么这种划分方案对 \(f_m\) 有 \(2^c\) 的贡献。
总时间复杂度 \(O(B_n n^2 (s + n^2))\)。
398. P5748 集合划分计数
显然每个盒子的 EGF 为 \(F(x) = e^x - 1\)。答案的 EGF 为 \(G(x) = e^{F(x)}\)。
399. QOJ1285 Stirling Number
因为 \(x^{\overline p} \equiv x^p - x \pmod p\),所以设 \(n = pq + r\),其中 \(r \in [0, p - 1]\),则有:
设 \(k - q = a(p - 1) + b\),其中 \(b \in [0, p - 2]\),那么:
设 \(m - q = k(p - 1) + t\),其中 \(t \in [0, p - 2]\),那么:
又因为:
这个式子由 \(\binom{n}{m} = \binom{n - 1}{m} + \binom{n - 1}{m - 1}\) 易证。
那么:
那么剩下的问题是给定 \(r, t\),求 \(x^{\overline r}\) 的前 \(t\) 次项系数和。
考虑一个多项式 \(f(x)\),设模数的原根为 \(g\),若我们求出 \(f(g^0), f(g^1), \ldots, f(g^{p - 2})\),那么我们可以线性地求出 \(f(x)\) 的前 \(t\) 次项系数和。
具体地,考虑 \(\sum\limits_{i = 0}^{p - 2} g^{ki}\),只有当 \(k = 0\) 时这个式子等于 \(p - 1 \equiv -1 \pmod p\),当 \(k \ne 0\) 时由等比数列求和公式可知它等于 \(0\)。
那么考虑若要求 \(f(x)\) 的第 \(j\) 次项,\(-\sum\limits_{i = 0}^{p - 2} g^{-ij} f(g^i)\) 即为答案。
所以:
求 \(f(g^i)\) 可以预处理阶乘及其逆元然后 \(O(1)\) 单次计算,后面那个 \(\sum\limits_{i = 0}^t g^{-ij}\) 可以用等比数列求和公式然后预处理原根的次方做到 \(O(1)\) 单次计算。
总时间复杂度 \(O(p)\)。
400. P4916 [MtOI2018] 魔力环
考虑 Burnside 定理,把旋转同构去掉。
然后因为染色要考虑标号,所以先断环为链,考虑把 \(m\) 个染色的球塞到 \(n - m\) 个球的空隙中,要求第一个空隙和最后一个空隙的球数量的和不超过 \(k\)。
可以先枚举第一个空隙和最后一个空隙的球数量的和,然后剩下变成了一个经典的有上界的插板问题,容斥即可。
时间复杂度是因数和。
401. P5824 十二重计数法
只考虑第 \(10\) 问(第 \(12\) 问可以 \(n \gets n - m\) 转化为第 \(10\) 问,其他问是平凡的)。
画出柱状图,然后旋转 \(90°\),变成了一个体积为 \(1 \sim m\) 的完全背包问题。
答案即为:
考虑取 \(\ln\),众所周知 \(\ln(\frac{1}{1 - x^i}) = \sum\limits_{j \ge 1} \frac{x^{ij}}{j}\),然后再 \(\exp\) 回去即可。
402. CF1528F AmShZ Farm
先来考虑 \(a\) 的计数。
考虑序列转等概率环模型(CF838D Airplane Arrangements)。即考虑一个长度为 \(n + 1\) 的环,有 \(n\) 个人,每个人有一个目标位置 \(a_i\)(\(1 \le a_i \le n + 1\)),每个人会走到目标位置后第一个没被占用的位置。最后 \(n + 1\) 被占用说明不合法。
发现每个位置等价,所以答案就是 \(\frac{(n + 1)^n}{n + 1} = (n + 1)^{n - 1}\)。
一个 \(a_i\) 对最终答案的贡献是 \(\sum\limits_{i = 1}^{n + 1} c_i^k\),其中 \(c_i\) 为 \(i\) 在 \(a\) 中的出现次数。
因为每个位置等价,所以每个位置的 \(\sum\limits_a c_i^k\) 都相等,所以我们只用考虑算其中一个,最后乘 \(n + 1\),又因为有 \(\frac{1}{n + 1}\) 的概率使得 \(a\) 合法,所以又要乘一个 \(\frac{1}{n + 1}\),两者抵消了。
所以最后答案就是:
但是直接计算是 \(O(n)\) 的。经过一些 dirty work 的推式子(普通幂转下降幂)可得答案为:
卷积求一行的第二类斯特林数即可做到 \(O(k \log k)\)。
403. P4727 [HNOI2009] 图的同构计数 & P4128 [SHOI2006] 有色图
这里相当于一个变换是一个排列。
考虑枚举环长集合,设其为 \(b_1, b_2, \ldots, b_k\),那么环内部的边有 \(\left\lfloor\frac{b_i}{2}\right\rfloor\) 个等价类,环 \((i, j)\) 之间的边有 \(\gcd(b_i, b_j)\) 个等价类。再算一下能形成指定环长集合的排列个数即可。
404. [ABC284Ex] Count Unlabeled Graphs
和上一题几乎一样,多一个二项式反演处理“恰好 \(k\) 种颜色”。
405. CF1954F Unique Strings
相当于求 \(1\) 的个数在 \([l, r]\) 之间,最长 \(1\) 连续段 \(\ge c\) 的方案数。
总方案数减不合法方案数,变成求最长 \(1\) 连续段 \(< c\) 的方案数。
然后再套用 Burnside 定理把循环同构去掉。
但是现在是一个环,所以断环为链,枚举最左端和最右端的 \(1\) 连续段长度。那么就变成链了,随便前缀和优化 dp 预处理一下即可。
406. QOJ834 Disjoint LIS
其实限制就是排列的 \(2-\text{LDS}\) 长度等于 \(1 - \text{LDS}\) 长度的两倍。考虑排列对应的杨表,相当于前面两行长度相同。
然后因为同种形态的杨表对和排列有双射,所以固定杨表形态,对应的排列个数就是 \(f(\lambda)^2\)。
407. [ARC062F] Painting Graphs with AtCoDeer
感觉挺牛的,没想到/ll。
首先每条边转不出自己所在的点双,所以点双之间是独立的。
考虑单个点双如何计算答案。
如果点双只有一条边,那么方案数就是 \(K\)。
如果点双是一个单环,变成了 Polya 模板题。
否则点双是由 \(> 1\) 个环复合而成的。发现每条边的颜色都能互换。具体地,我们可以使其他边不变然后交换两个环交界处的两条边。对于不在环交界处的两条边,我们可以把它们转到交界处再进行操作。设点双边数为 \(c\),那么方案数是把 \(c\) 分成 \(K\) 份(每份可以为空)的方案数,为 \(\binom{c + K - 1}{K - 1}\)。
408. CF1583F Defender of Childhood Dreams
我是傻逼。
答案是 \(\left\lceil \log_k n \right\rceil\),因为我们可以证明用 \(c\) 种颜色能解决 \(k^c\) 个点。
证明考虑归纳,把全部点分成 \(k\) 份,每份变成了一个子问题,两份之间的点的边染同一种颜色。
构造直接根据证明的思路做即可。