闲话
打题!别过你那少爷生活
好 今天又没有想说的了
但是我没学过载谭 Binomial Sums!
今日推歌:关山酒(covered by 兰音 Reine)。
杂题
我也想摆啊,但是真不能一直摆啊。
CF1034E
给定长为 2n 的序列 ai,bi,请计算 ci=∑j|k=i,j&k=0aj×bk(mod4)。
n≤21。
这是子集卷积的形式没错,但是 O(2nn2) 的复杂度不支持 n=21。
mod 4 启发我们构造一种新的形式。考虑 ∀k>0, 4k≡0(mod4),我们不妨采用 4k 来分离贡献。
假设 f(v) 表示 v 的二进制表示中 1 的个数。这样我们可以发现,4f(k) 对第 k 位的值正是一个可以分离贡献的系数,我们可以通过这个系数删除 j&k=0 的限制。
证明考虑对 j&k=0,4f(i)+f(j)−f(i|j)=1,而其余情况都是 4 的倍数。
因此我们只需要构造 a′i=ai×4f(i),则 c′ 序列就是 a′ 和 b′ 的或卷积。先乘入 4f(i) 后做或卷积,再除掉即可。
总时间复杂度 O(2nn)。
Submission.
CF1305F
给定 n 个数,每次可以选择将一个数 +1 或 −1,求至少多少次操作使得整个序列都是正数且全部元素的 gcd>1 。
n≤2×105,ai≤1012。
这题给我整不会了。
首先一定有一个构造是操作次数 ≤n 的。我们只需要将所有奇数 +1,这样总会有 2 作为 gcd。
然后我们可以知道对最优方案,一定有至少一半的元素被至多操作了一次。这点可以通过反证法根据如上构造的存在性证明。
然后我们就有一种随机化方法了。我们随便找一个数,考虑它在最终方案中被 +1/±0/−1 的情况。这个数最终的得数是知道的,且最终的 gcd 一定是这个数其中一个质因子的倍数。因此可以枚举这个数的质因子,对其他所有数求最小步数使得它成为当前枚举到的质因子的倍数。加和取最小值即可。
这样的错误率是 1/2,我们只需要随机 30 次就可以将错误率减到 10−10 量级。
假设值域为 V,随机了 k 次,并使用的分解算法单次复杂度是 f(V),总时间复杂度为 O(kf(V)+nlogV)。
Submission.
CF1153F
有一段长为 l 的线段,有 n 个区间,左右端点在 [0,l) 间均匀随机(可能不是整数)
求期望被至少 k 段区间覆盖的长度,对 109+7 取模。
1≤n,k≤107,1≤l≤109。
这里不支持辩论。
首先可以考虑 l=1 的情况,答案乘入 l 即为最终答案。
也可以发现,这时的期望就是概率,因此可以通过算概率来计算答案。
考虑任意点 x∈[0,1),它被覆盖一次的概率是 2x(1−x),也就是左边长度乘右边长度乘二,因此可以枚举一个点被实际覆盖的次数 i,作选择就能得到某个点被至少 k 段区间覆盖的概率
P(x)=n∑i=k(ni)(2x(1−x))i(1−2x(1−x))n−i
答案即为
∫10n∑i=k(ni)(2x(1−x))i(1−2x(1−x))n−idx= ∫10n∑i=kn−i∑j=0(−1)j(ni)(n−ij)(2x(1−x))i+jdx= n∑i=kn−i∑j=0(−1)j(ni)(n−ij)2i+j∫10xi+j(1−x)i+jdx= n∑i=kn−i∑j=0(−1)jn!i!j!(n−i−j)!2i+j(i+j)!2(2i+2j+1)!(Beta 函数)= n∑i=ki−k∑j=0(−1)jn!(i−j)!j!(n−i)!2ii!2(2i+1)!= n∑i=kn!(n−i)!2ii!2(2i+1)!i−k∑j=0(−1)j1j!(i−j)!= n∑i=k(ni)2ii!2(2i+1)!i−k∑j=0(−1)j(ij)= n∑i=k(ni)2ii!2(2i+1)!(i−k∑j=0(−1)j((i−1j)−(i−1j−1)))= n∑i=k(ni)2ii!2(2i+1)!(i−k∑j=0(−1)j(i−1j)−i−k−1∑j=0(−1)j(i−1j))= n∑i=k(ni)2ii!2(2i+1)!(−1)i−k(i−1i−k)= n∑i=k(−1)i−k(ni)(i−1i−k)2ii!2(2i+1)!
这样我们可以在 O(n) 的复杂度内得到答案。
Submission.
Bonus: 你能否找到最终答案的 ode 形式?
SP11414
Alice 和 Bob 在一棵 n 个节点的树上玩游戏,Alice 先手。
每个节点最初都是黑色或白色。他们轮流执行以下操作:从当前树中选择一个白色节点 v,将路径 (1,v) 上的所有白色节点都变为黑色。最后操作的玩家获胜。当他们都使用最佳策略时,求先手是否必胜,并求出第一步可以选择的点。
1≤n≤105。
考虑用 SG 函数来刻画这个性质。
我们令 sg(u) 表示 u 及其子树组成的树的 SG 函数值,然后考虑从什么地方转移。
如果 u 子树内全是黑点,则 sg(u)=0,这显然。反之考虑一个子树内的白点 v,我们需要考虑选择 v 对答案的贡献。
选择 v 会删除 u−v 路径上的所有点,将原树分裂成一棵森林。假设新森林的根集合是 S,让这状态的 SG 函数 sg′(S)=⨁v∈Ssg(v)。同样有 sg(u)=mexS(sg′(S))。这样直接做的复杂度是 O(n3) 的。
考虑优化。
我们对每个点维护一个集合 S(u),表示其子树内能通过删路径得到的森林的 SG 函数的全体。
考虑 S(u) 内的元素可以如何转移过来。对于 u 的儿子 v,考虑 s∈S(v),发现它对应的森林中增加的树即为 u 的非 v 儿子的子树,因此我们直接将 s 异或上这些子树的 SG 函数值后放入 S(u) 即可。还有一种是自己是白点,直接把儿子的 SG 函数异或起来就行了。这样直接做的复杂度是 O(n2) 的。
考虑操作。
我们的操作是:将集合内所有值异或一个数;将两个集合合并;求一个集合的 mex。
这可以用 01Trie 维护,得到 O(nlogn) 的复杂度。
Submission.
CF1528F
给定 n,k,求长度为 n 的“好序列” {a} 的贡献和。
“好序列”这样定义:对于 i∈[1,n],∑[aj≥i]≤n−i+1
其贡献定义为每种颜色的出现次数的 k 次幂之和。
n≤109,k≤105。
又到了大家最喜欢的多项式环节
转化一下定义,好算。
∑[aj≥i]≤n−i+1⇒∑[aj≤i]≥i
设 ci=∑j[aj=i],再转化为
∑j≤icj≥i
假设 c 枚举所有 ∑ci=n,∀i, ∑j≤icj≥i 的序列,答案即为
∑c(nc1,c2…,cn)∏icki
下面的形式好看,但是上面的限制就不是很行。考虑转化到经典组合对象上。
考虑一棵 n 个点的树和它的 dfn 序。我们可以发现,对 dfn 序的任意前缀,它都代表着一个完整的 i 大小子树。这子树有什么性质是 ≥i 的呢?
考虑儿子个数。我们将这个 dfn 序的每个位置转化成对应节点的儿子个数,可以知道这能枚举所有 ∑ci=n−1 的满足性质的 c。
等等,n−1?
我们事实上只要考虑所有 n+1 个点的有标号且确定了根为 1 的树,用这样的树构造出长度为 n+1 的儿子个数序列,删掉最后一个 0 即可。可以发现这样能覆盖所有合法的 c。
题意转化完了。
假设 c 枚举所有 ∑ci=n,n+1 个点的有标号定根树生成的序列,答案即为
∑c(nc1,c2…,cn)∏icki
考虑先算所有有标号有根树的贡献,最后除以 n+1 就是答案。考虑
F(x)=x∑i≥0ikFi(x)i!
答案就是 1/(n+1)[xn+1/(n+1)!]F(x)。
看到这个多叉树形式可以直接考虑拉反了。显然有
xF⟨−1⟩(x)=∑i≥0ikxii!
能知道答案是
[xnn!](∑i≥0ikxii!)n+1
但是你发现下面就不太能推了——反正我是不会了。接下来想要推导,就势必要把 ik 和 vn+1 分离。
考虑引入新元 t。我们让 tik 替换 ik,设
F(x,t)=x∑i≥0tikFi(x)i!
答案就是
[xn+1(n+1)!]∂∂tF(x,t)∣∣∣t=1
这样我们再进行如上的推导。记 F(x,t) 对 x 的复合逆是 F⟨−1⟩。我们知道
(n+1)![xn+1]∂∂tF(x,t)∣∣∣t=1= n![xn]∂∂t(xF⟨−1⟩)n+1∣∣∣t=1= n![xn]∂∂t(∑i≥0xii!tik)n+1∣∣
∣∣t=1= n(∑i≥0xii!tik)n∣∣
∣∣t=1= n(∑i≥0xii!)n= n![xn]enx∑i≥0iki!xi= n∑i=0(ni)iknn−i= n∑i=0i∑j=0(ni)(ij){kj}j!nn−i= n∑i=0i∑j=0(nj)(n−ji−j){kj}j!nn−i= k∑j=0(nj){kj}j!n∑i=j(n−ji−j)nn−i= k∑j=0(nj){kj}j!n−j∑i=0(n−ji)nn−j−i= k∑j=0(nj){kj}j!(1+n)n−j
这形式是容易 O(klogk) 求得的。
Submission.
当然您也可以在 ∑ni=0(ni)iknn−i 这一步停下。我们能发现
n∑i=0(ni)iknn−i= [xkk!]n∑i=0(ni)eixnn−i= [xkk!](ex+n)n
直接作可以 O(klogk),常数大。Submission.
通过 EI 的载谭 Binomial Sums 技术(一份只包含所需信息的讲解)可以做到 O(k+logn)。目前没实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】