闲话 23.3.16
闲话
打题!别过你那少爷生活
好 今天又没有想说的了
但是我没学过载谭 Binomial Sums!
今日推歌:关山酒(covered by 兰音 Reine)。
杂题
我也想摆啊,但是真不能一直摆啊。
给定长为 \(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)\)。
给定 \(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)\)。
有一段长为 \(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\) 段区间覆盖的概率
答案即为
这样我们可以在 \(O(n)\) 的复杂度内得到答案。
Bonus: 你能否找到最终答案的 ode 形式?
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)\) 的复杂度。
给定 \(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\)。
又到了大家最喜欢的多项式环节
转化一下定义,好算。
设 \(c_i = \sum_j [a_j = i]\),再转化为
假设 \(c\) 枚举所有 \(\sum c_i = n\),\(\forall i,\ \sum_{j \le i} c_j \ge i\) 的序列,答案即为
下面的形式好看,但是上面的限制就不是很行。考虑转化到经典组合对象上。
考虑一棵 \(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\) 个点的有标号定根树生成的序列,答案即为
考虑先算所有有标号有根树的贡献,最后除以 \(n + 1\) 就是答案。考虑
答案就是 \(1/(n+1)[x^{n + 1}/(n + 1)!] F(x)\)。
看到这个多叉树形式可以直接考虑拉反了。显然有
能知道答案是
但是你发现下面就不太能推了——反正我是不会了。接下来想要推导,就势必要把 \(i^k\) 和 \(v^{n + 1}\) 分离。
考虑引入新元 \(t\)。我们让 \(t^{i^k}\) 替换 \(i^k\),设
答案就是
这样我们再进行如上的推导。记 \(F(x, t)\) 对 \(x\) 的复合逆是 \(F^{\langle -1\rangle}\)。我们知道
这形式是容易 \(O(k \log k)\) 求得的。
当然您也可以在 \(\sum_{i = 0}^n \binom{n}{i} i^k n^{n - i}\) 这一步停下。我们能发现
直接作可以 \(O(k\log k)\),常数大。Submission.
通过 EI 的载谭 Binomial Sums 技术(一份只包含所需信息的讲解)可以做到 \(O(k + \log n)\)。目前没实现。
以下是博客签名,与正文无关。
请按如下方式引用此页:
本文作者 joke3579,原文链接:https://www.cnblogs.com/joke3579/p/chitchat230316.html。
遵循 CC BY-NC-SA 4.0 协议。
请读者尽量不要在评论区发布与博客内文完全无关的评论,视情况可能删除。