2023-3-3 #41 轰鸣的钟声渐近
——COP《同归世界线》
236 ABC288H A Nameless Counting Problem
被薄杀了!!
首先很容易通过数位 dp 计算出长度为 \(k\) 异或为 \(X\) 的序列个数,这一部分是 \(O(n^3\log V)\) 的。
一个递增序列可以通过删除若干相同 pair 映射到唯一的集合,于是我们若对于所有 \(k\) 计算出元素不同的,长度为 \(k\) 异或为 \(X\) 的序列个数,则可以通过塞入若干不影响异或和的相同 pair 来生成出所有递增序列,这无非是一个插板法的事情。
计算上面那个东西有两种处理方法,第一种可能更机械,但我觉得考虑起来也比较麻烦。
①元素互不相同指向了集合划分容斥,我们将出现次数为奇数的数与出现次数为偶数的数分开考虑,依次加入若干个“等价团”就可以 dp 出 \(i\) 个等价团,大小和为 \(j\),大小全为奇数/偶数的容斥系数和。注意到我们并不在乎偶数大小的团的个数,只需将贡献乘上团个数阶乘的倒数来保证无序。
因此合并奇数偶数只用枚举奇数团的个数与大小和,以及偶数团的大小和,那么我们就可以 \(O(n^3)\) 地计算上面那个问题了。
②官方题解做法:直接进行普通的容斥,假设 \(n\) 个数字中有 \(i\) 个出现次数为奇数的数字,其对应了 \(j\) 个下标,那么转移就是一个组合数选出这些下标,乘上将 \(j\) 个数分成 \(i\) 个大小为奇数的集合的方案数,将 \(n-j\) 个数分成若干个大小为偶数的集合的方案数,乘上长度为 \(i\),互不相同,异或和为 \(X\) 的序列个数,转移容易做到 \(O(n^3)\)。
237 ABC289H Trio
破题水(
根据经验,我们只需计算 \(i\) 步从初始态走到一起的方案数构成的多项式以及 \(i\) 步从在一起的状态走到一起的方案数多项式即可。
第一个问题显然强于第二个,我们不妨令 \(u,v\) 为第一二个人的距离与第二三个人的距离,于是方案数为:
一次卷积即可,复杂度 \(O(n\log n)\)。
238 ABC290H Bow Meow Optimization
竟然不会做,伤心😔。
如果确定哪些位置是猫哪些位置是狗,那么填数一定是按照系数倒序填出一个单峰形。
通过调整可以证明猫和狗的谷底中间至多隔一个猫/狗(奇偶性的一些限制),更进一步地可以证明猫和狗放在一起看,左右两侧均单调。
于是直接 dp 记录放了多少猫狗,左边几只猫几只狗就可以 \(O(n^3)\) 了。
239 CTT2019 D1T1 递增树列
比较简单。
lca 序列一定是某个点到根的一条路径。我们令 \(f_{x,i}\) 为 \(x\) 子树内选出一个长度为 \(i\) 且满足条件的序列数量,转移可以枚举一个儿子表示剩余的子树与这个子树剩余大小。
那么问题无非是:每个球有个颜色,排列使得相邻颜色不同的方案数。经典地容斥一下,很容易写出 \(O(poly(n))\) 的 dp。
240 CTT2019 D1T2 异世界的文章分割者
有点难。
考虑求一个字符串的答案,一个线性的做法是用 SAM 求出每个结点出现的第一次最后一次出现然后做个前缀和。
二分答案,我们从前往后贪心扩展最长的右端点。二分会使得区间长度总和不对,使用倍增来找到第一个不合法的 \(2^k\),再二分一下就好了,这样复杂度是 \(O(n\log n\log V)\)。
241 CTT2019 D1T3 时间旅行
qiuly 真是太恐怖了!!
先考虑一个环,每个集合只有一种选择怎么做,结论是将 \(a\) 排序后,答案为 \(\min\{a_{i+\frac{n+1}{2}}-a_i\}\),构造方法是 \(a_m,a_1,a_{m+1},a_2,\cdots,a_n\)(令 \(m=\frac{n+1}2\))
可以证明,答案结构一定是 \(k-1\) 个单点带一个大环。
我们只需说明,可以将两个大小分别为 \(n,m>1\) 的环 \(a,b\) 调整为一个大环与一个单点。
我们默认每个环的排列方式都按照上面的结论来,在第一个环我们抽出 \(a_{\frac{n+1}2}\) 作为单点,并提取剩余的链;在第二个环我们删除一条边并将这条链接入缺口。
可以说明选择 \((b_1,b_{\frac{m+1}2})\) 或 \((b_m,b_{\frac{m+1}2})\) 足以调整出解。假设我们提取出的链区间为 \([l,r]\),删除的边两端权值是 \([p,q]\),若两个区间不交或者包含很容易得到构造,否则通过讨论 \(a_{\frac{n+1}2},b_{\frac{m+1}2}\) 可以得出构造。
二分答案 \(w\) 并将可以取出一对距离超过 \(w\) 的集合连边,我们接下来说明,找到一个大小为 \(2k+3\) 的奇环等价于找到 \(k\) 对匹配与一个 \(A-B-C\) 状的匹配。
充分性可以考虑将匹配选择的数字写下来并排序,考察任意区间 \([i,i+k+1]\),这个区间内若不包含大小为 \(2\) 的匹配,那么其一定包含 \(A,B,C\) 中至少两个,因此这个区间的数字极差不小于 \(w\),通过上面的构造可以构造出环。
必要性显然。
我们枚举 \(B\) 是哪个集合的哪个数,将 \(B\) 拆成两个集合 \(B_1,B_2\) 分别匹配 \(A,C\),那么就是动态加入删除 \(O(1)\) 个点的一般图最大匹配,带花树处理即可。(其实我不是很会带花树!!)
242 CF1789F Serval and Brain Power
做了好久,太伤心了。
\(k=2\) 很容易计算,无非枚举中断点计算前后缀的 lcs,那么 \(k=3\) 也可以类似处理,复杂度 \(O(n^5)\)。
注意到 \(k=4\) 被 \(k=2\) 包含,而 \(k\geqslant 5\) 时某一次 repeat 的下标极差不会超过 \(15\),我们暴力枚举一个长度为 \(16\) 的区间以及其所有子集,\(O(n)\) 在原序列中贪心一下就好了。

浙公网安备 33010602011771号