闲话 23.3.16

闲话

打题!别过你那少爷生活

好 今天又没有想说的了
但是我没学过载谭 Binomial Sums!

今日推歌:关山酒(covered by 兰音 Reine)

杂题

我也想摆啊,但是真不能一直摆啊。

CF1034E

给定长为 \(2^n\) 的序列 \(a_i, b_i\),请计算 \(c_i = \sum_{j | k = i,j \& k = 0} a_j\times b_k \pmod 4\)

\(n\le 21\)

这是子集卷积的形式没错,但是 \(O(2^n n^2)\) 的复杂度不支持 \(n = 21\)

\(\bmod\ 4\) 启发我们构造一种新的形式。考虑 \(\forall k>0, \ 4^k\equiv 0 \pmod 4\),我们不妨采用 \(4^k\) 来分离贡献。
假设 \(f(v)\) 表示 \(v\) 的二进制表示中 \(1\) 的个数。这样我们可以发现,\(4^{f(k)}\) 对第 \(k\) 位的值正是一个可以分离贡献的系数,我们可以通过这个系数删除 \(j\& k = 0\) 的限制。
证明考虑对 \(j \& k = 0\)\(4^{f(i) + f(j) - f(i | j)} = 1\),而其余情况都是 \(4\) 的倍数。
因此我们只需要构造 \(a_i' = a_i\times 4^{f(i)}\),则 \(c'\) 序列就是 \(a'\)\(b'\) 的或卷积。先乘入 \(4^{f(i)}\) 后做或卷积,再除掉即可。

总时间复杂度 \(O(2^n n)\)

Submission.



CF1305F

给定 \(n\) 个数,每次可以选择将一个数 \(+1\)\(-1\),求至少多少次操作使得整个序列都是正数且全部元素的 \(\gcd>1\)

\(n\leq 2\times10^5,a_i\leq 10^{12}\)

这题给我整不会了。

首先一定有一个构造是操作次数 \(\le n\) 的。我们只需要将所有奇数 \(+1\),这样总会有 \(2\) 作为 \(\gcd\)
然后我们可以知道对最优方案,一定有至少一半的元素被至多操作了一次。这点可以通过反证法根据如上构造的存在性证明。

然后我们就有一种随机化方法了。我们随便找一个数,考虑它在最终方案中被 \(+1/\pm 0/-1\) 的情况。这个数最终的得数是知道的,且最终的 \(\gcd\) 一定是这个数其中一个质因子的倍数。因此可以枚举这个数的质因子,对其他所有数求最小步数使得它成为当前枚举到的质因子的倍数。加和取最小值即可。
这样的错误率是 \(1/2\),我们只需要随机 \(30\) 次就可以将错误率减到 \(10^{-10}\) 量级。

假设值域为 \(V\),随机了 \(k\) 次,并使用的分解算法单次复杂度是 \(f(V)\),总时间复杂度为 \(O(kf(V) + n\log V)\)

Submission.



CF1153F

有一段长为 \(l\) 的线段,有 \(n\) 个区间,左右端点在 \([0,l)\) 间均匀随机(可能不是整数)

求期望被至少 \(k\) 段区间覆盖的长度,对 \(10^9 + 7\) 取模。

\(1\le n, k\le 10^7, 1\le l\le 10^9\)

这里不支持辩论。

首先可以考虑 \(l = 1\) 的情况,答案乘入 \(l\) 即为最终答案。
也可以发现,这时的期望就是概率,因此可以通过算概率来计算答案。

考虑任意点 \(x\in [0, 1)\),它被覆盖一次的概率是 \(2x(1 - x)\),也就是左边长度乘右边长度乘二,因此可以枚举一个点被实际覆盖的次数 \(i\),作选择就能得到某个点被至少 \(k\) 段区间覆盖的概率

\[P(x) = \sum_{i = k}^n \binom{n}{i} (2x(1 - x))^i (1 - 2x(1 - x))^{n - i} \]

答案即为

\[\begin{aligned} & \int_0^1 \sum_{i = k}^n \binom{n}{i} (2x(1 - x))^i (1 - 2x(1 - x))^{n - i} \text dx \\ = \ & \int_0^1 \sum_{i = k}^n \sum_{j = 0}^{n - i} (-1)^j \binom{n}{i} \binom{n - i}{j} (2x(1 - x))^{i + j} \text dx \\ = \ & \sum_{i = k}^n \sum_{j = 0}^{n - i} (-1)^j \binom{n}{i} \binom{n - i}{j} 2^{i + j} \int_0^1 x^{i + j}(1 - x)^{i + j} \text dx \\ = \ & \sum_{i = k}^n \sum_{j = 0}^{n - i} (-1)^j \frac{n!}{i!j!(n - i - j)!} \frac{2^{i + j}(i + j)!^2}{(2i + 2j + 1)!} \quad (\text{Beta}\ 函数) \\ = \ & \sum_{i = k}^n \sum_{j = 0}^{i - k} (-1)^j \frac{n!}{(i - j)!j!(n - i)!} \frac{2^{i} i!^2}{(2i + 1)!} \\ = \ & \sum_{i = k}^n \frac{n!}{(n - i)!} \frac{2^{i} i!^2}{(2i + 1)!} \sum_{j = 0}^{i - k} (-1)^j \frac{1}{j!(i - j)!} \\ = \ & \sum_{i = k}^n \binom{n}{i} \frac{2^{i} i!^2}{(2i + 1)!} \sum_{j = 0}^{i - k} (-1)^j \binom{i}{j} \\ = \ & \sum_{i = k}^n \binom{n}{i} \frac{2^{i} i!^2}{(2i + 1)!} \left(\sum_{j = 0}^{i - k} (-1)^j \left( \binom{i - 1}{j} -\binom{i - 1}{j - 1} \right) \right) \\ = \ & \sum_{i = k}^n \binom{n}{i} \frac{2^{i} i!^2}{(2i + 1)!} \left(\sum_{j = 0}^{i - k} (-1)^j \binom{i - 1}{j} - \sum_{j = 0}^{i - k - 1} (-1)^j \binom{i - 1}{j} \right) \\ = \ & \sum_{i = k}^n \binom{n}{i} \frac{2^{i} i!^2}{(2i + 1)!} (-1)^{i - k}\binom{i - 1}{i - k} \\ = \ & \sum_{i = k}^n (-1)^{i - k}\binom{n}{i}\binom{i - 1}{i - k} \frac{2^{i} i!^2}{(2i + 1)!} \end{aligned}\]

这样我们可以在 \(O(n)\) 的复杂度内得到答案。

Submission.

Bonus: 你能否找到最终答案的 ode 形式?



SP11414

Alice 和 Bob 在一棵 \(n\) 个节点的树上玩游戏,Alice 先手。

每个节点最初都是黑色或白色。他们轮流执行以下操作:从当前树中选择一个白色节点 \(v\),将路径 \((1,v)\) 上的所有白色节点都变为黑色。最后操作的玩家获胜。当他们都使用最佳策略时,求先手是否必胜,并求出第一步可以选择的点。

\(1\le n\le 10^5\)

考虑用 SG 函数来刻画这个性质。

我们令 \(sg(u)\) 表示 \(u\) 及其子树组成的树的 SG 函数值,然后考虑从什么地方转移。

如果 \(u\) 子树内全是黑点,则 \(sg(u) = 0\),这显然。反之考虑一个子树内的白点 \(v\),我们需要考虑选择 \(v\) 对答案的贡献。
选择 \(v\) 会删除 \(u-v\) 路径上的所有点,将原树分裂成一棵森林。假设新森林的根集合是 \(S\),让这状态的 SG 函数 \(sg'(S) = \bigoplus_{v\in S} sg(v)\)。同样有 \(sg(u) = \text{mex}_S ( sg'(S))\)。这样直接做的复杂度是 \(O(n^3)\) 的。

考虑优化。
我们对每个点维护一个集合 \(S(u)\),表示其子树内能通过删路径得到的森林的 SG 函数的全体。
考虑 \(S(u)\) 内的元素可以如何转移过来。对于 \(u\) 的儿子 \(v\),考虑 \(s\in S(v)\),发现它对应的森林中增加的树即为 \(u\) 的非 \(v\) 儿子的子树,因此我们直接将 \(s\) 异或上这些子树的 SG 函数值后放入 \(S(u)\) 即可。还有一种是自己是白点,直接把儿子的 SG 函数异或起来就行了。这样直接做的复杂度是 \(O(n^2)\) 的。

考虑操作。
我们的操作是:将集合内所有值异或一个数;将两个集合合并;求一个集合的 \(\text{mex}\)
这可以用 01Trie 维护,得到 \(O(n\log n)\) 的复杂度。

Submission.



CF1528F

给定 \(n,k\),求长度为 \(n\) 的“好序列” \(\{a\}\) 的贡献和。

“好序列”这样定义:对于 \(i\in [1,n]\)\(\sum [a_j\ge i]\le n- i+1\)

其贡献定义为每种颜色的出现次数的 \(k\) 次幂之和。

\(n\le 10^9,k\le 10^5\)

又到了大家最喜欢的多项式环节

转化一下定义,好算。

\[\sum [a_j\ge i]\le n- i+1\quad \Rightarrow \quad \sum [a_j\le i]\ge i \]

\(c_i = \sum_j [a_j = i]\),再转化为

\[\sum_{j \le i} c_j \ge i \]

假设 \(c\) 枚举所有 \(\sum c_i = n\)\(\forall i,\ \sum_{j \le i} c_j \ge i\) 的序列,答案即为

\[\sum_{c} \binom{n}{c_1, c_2 \dots, c_n} \prod_i c_i^k \]

下面的形式好看,但是上面的限制就不是很行。考虑转化到经典组合对象上。

考虑一棵 \(n\) 个点的树和它的 dfn 序。我们可以发现,对 dfn 序的任意前缀,它都代表着一个完整的 \(i\) 大小子树。这子树有什么性质是 \(\ge i\) 的呢?
考虑儿子个数。我们将这个 dfn 序的每个位置转化成对应节点的儿子个数,可以知道这能枚举所有 \(\sum c_i = n - 1\) 的满足性质的 \(c\)
等等,\(n - 1\)
我们事实上只要考虑所有 \(n + 1\) 个点的有标号且确定了根为 \(1\) 的树,用这样的树构造出长度为 \(n + 1\) 的儿子个数序列,删掉最后一个 \(0\) 即可。可以发现这样能覆盖所有合法的 \(c\)

题意转化完了。
假设 \(c\) 枚举所有 \(\sum c_i = n\)\(n + 1\) 个点的有标号定根树生成的序列,答案即为

\[\sum_{c} \binom{n}{c_1, c_2 \dots, c_n} \prod_i c_i^k \]

考虑先算所有有标号有根树的贡献,最后除以 \(n + 1\) 就是答案。考虑

\[F(x) = x\sum_{i\ge 0} \frac{i^k F^i(x)}{i!} \]

答案就是 \(1/(n+1)[x^{n + 1}/(n + 1)!] F(x)\)

看到这个多叉树形式可以直接考虑拉反了。显然有

\[\frac{x}{F^{\langle -1\rangle}(x)} = \sum_{i\ge 0} \frac{i^kx^i}{i!} \]

能知道答案是

\[\left[\frac{x^n}{n!}\right] \left( \sum_{i\ge 0} \frac{i^kx^i}{i!} \right)^{n + 1} \]

但是你发现下面就不太能推了——反正我是不会了。接下来想要推导,就势必要把 \(i^k\)\(v^{n + 1}\) 分离。

考虑引入新元 \(t\)。我们让 \(t^{i^k}\) 替换 \(i^k\),设

\[F(x, t) = x\sum_{i\ge 0} \frac{t^{i^k} F^i(x)}{i!} \]

答案就是

\[\left[\frac{x^{n + 1}}{(n + 1)!}\right] \left.\frac{\partial}{\partial t} F(x, t)\right\rvert_{t = 1} \]

这样我们再进行如上的推导。记 \(F(x, t)\)\(x\) 的复合逆是 \(F^{\langle -1\rangle}\)。我们知道

\[\begin{aligned} & (n + 1)!\left[x^{n + 1}\right] \left.\frac{\partial}{\partial t} F(x, t)\right\rvert_{t = 1} \\=\ & n!\left[x^n\right] \left.\frac{\partial}{\partial t} \left(\frac{x}{F^{\langle -1\rangle}}\right)^{n + 1}\right\rvert_{t = 1} \\=\ & n!\left[x^n\right] \left.\frac{\partial}{\partial t} \left(\sum_{i\ge 0} \frac{x^i}{i!}t^{i^k} \right)^{n + 1}\right\rvert_{t = 1} \\=\ & n!\left[x^n\right] \left. \left(\sum_{i\ge 0} \frac{x^i}{i!}i^k \right)\left(\sum_{i\ge 0} \frac{x^i}{i!}t^{i^k} \right)^{n}\right\rvert_{t = 1} \\=\ & n!\left[x^n\right] \left(\sum_{i\ge 0} \frac{x^i}{i!}i^k \right)\left(\sum_{i\ge 0} \frac{x^i}{i!} \right)^{n} \\=\ & n!\left[x^n\right] e^{nx} \sum_{i\ge 0} \frac{i^k}{i!}x^i \\=\ & \sum_{i = 0}^n \binom{n}{i} i^k n^{n - i} \\=\ & \sum_{i = 0}^n \sum_{j = 0}^i \binom{n}{i} \binom{i}{j} {k\brace j} j! n^{n - i} \\=\ & \sum_{i = 0}^n \sum_{j = 0}^i \binom{n}{j} \binom{n - j}{i - j} {k\brace j} j! n^{n - i} \\=\ & \sum_{j = 0}^k \binom{n}{j} {k\brace j} j! \sum_{i = j}^n \binom{n - j}{i - j} n^{n - i} \\=\ & \sum_{j = 0}^k \binom{n}{j} {k\brace j} j! \sum_{i = 0}^{n - j} \binom{n - j}{i} n^{n - j - i} \\=\ & \sum_{j = 0}^k \binom{n}{j} {k\brace j} j! (1 + n)^{n - j} \end{aligned}\]

这形式是容易 \(O(k \log k)\) 求得的。

Submission.

当然您也可以在 \(\sum_{i = 0}^n \binom{n}{i} i^k n^{n - i}\) 这一步停下。我们能发现

\[\begin{aligned} & \sum_{i = 0}^n \binom{n}{i} i^k n^{n - i} \\=\ & \left[\frac{x^k}{k!}\right] \sum_{i = 0}^n \binom{n}{i} e^{ix} n^{n - i} \\=\ & \left[\frac{x^k}{k!}\right] (e^x + n)^n \end{aligned}\]

直接作可以 \(O(k\log k)\),常数大。Submission.

通过 EI 的载谭 Binomial Sums 技术(一份只包含所需信息的讲解)可以做到 \(O(k + \log n)\)。目前没实现。

posted @ 2023-03-16 20:54  joke3579  阅读(86)  评论(1编辑  收藏  举报