省选模拟87 题解
A. a
直接构造一个简单的生成函数,就转化为求 $A^n(x)$ 的前 $x$ 项系数。
一个很神奇的解决多项式 $A^n(x)$ 前 $n$ 项系数的做法。
复杂度为 $O(nk)$,其中 $k$ 为 $A(x)$ 的项数。
做法是这样的,对 $A^{n+1}(x)$ 分别用乘法 $A(x)*A^n(x)$ 和 链式法则 求导,得到两个不同的式子。
联立可以解得一个四个变量的式子,其中两个变量是 $k$ 项的,另外一个导函数一个要求的函数。
通过导函数可以积分得到原函数,通过原函数卷积一下可以得到导函数,这样就可以不断递推下去。
B. b
考虑一个方案的概率,其实只和第一个出现次数为 $n$ 的颜色的最后一次出现的位置有关。
所以枚举这个位置是啥,然后分类讨论要求的颜色是否是先到达 $n$ 的颜色即可得到一个 $O(nq)$ 的做法。
优化只需要观察统计的式子,对于每个区间讨论即可。
其中一个只与 $k$ 有关,因为本题中保证 $\sum k \leq 2 * 10^5$,所以可以对于每一个 $k$ 都做一次前缀和。
另一个比较麻烦,要求的形如 $\sum \limits_{i=l}^r \binom{i+k}{n-1} * \frac{1}{2^i}$。
因为思维僵化,所以看起来这个东西很不可做,实际上只要统计 $\binom{i}{n-1} * \frac{1}{2^i}$ 的前缀和,乘一个系数即可。
C. c
首先考虑 $k$ 为奇数,可以把每个集合按照大小与 $\frac{k}{2}$ 的大小关系分为小集合、大集合两类。
然后有这样一个事情,两个大集合一定不能出现在同一段中,所以答案有个下界是大集合数量。
容易发现大集合数量 $\geq$ 小集合数量,考虑把大小为 $i$ 的大集合和大小为 $k-i$ 的小集合进行匹配。
通过霍尔定理可以知道这个东西是存在完美匹配的,所以这样做得到的就是最优解。
对于 $k$ 为偶数,需要特殊考虑大小 $\frac{k}{2}$ 的集合,然后问题是一般图的匹配。
一个结论是在本题的数据范围内,这个一般图也是存在完美匹配的,所以写一个一般图最大匹配即可。
解决这个的算法就是带花树。大概的思想就是弄黑点白点,定义白点到黑点的路径为匹配边,黑点到白点的路径为非匹配边。
如果找到点未染色,如果当前点无匹配边,那么可以增广了。
否则可以认为当前点是白点,直接拓展到与它匹配的黑点继续 bfs。
如果找到点已经染色了,如果形成偶环无视掉,如果形成奇环就找到 $lca$ 然后把这个奇环缩成一个点。
对于奇环上的每个白点还没有执行增广操作,所以染为黑色加入队列进行增广。
然后还有一个更简单的做法是直接随机出边然后记录是否访问过,实现简单。
每次在 dfs 里面把所有的出边 $random$ 一下就好了。