2023-6-3 #57 想要把猜测去证实 却无法启齿
——海格P《陌生人》
上一篇博客堆的东西有点多,最近复习学考没啥时间写,就开篇新的!
379 EGOI2021 D2T4 Double Move
套路题。
将宣布看成连边,连通块不是树和基环树肯定不优。令 \(f(G)\) 为图 \(G\) 合法定向方案数,根据 Angle Beats 2.0 的结论可知方案数是 \(2^c\prod t_i\),其中 \(c\) 是基环树数量,\(t_i\) 是每一棵树的大小。
答案为 \(\sum_i 2^{n-i}f(G_i)\),从后往前 dp,状压当前图的状态即可,状态数是 \(\sum_ip(i)(n-i+1)\)(\(p\) 为分拆数),\(n=35\) 时为 \(403779\)。
380 CF1740I Arranging Crystal Balls
感觉不难?被 3500 震慑了😣。
差分一下,我们需保证 \(a_1=0\),且差分数组 \(b\) 全为 \(0\)。
\(b\) 可以 \(+k\) 形成的环考虑,只要固定某条边的取值,这个环的方案就已经确定,容易计算每种方案对应代价。
容易列出一个 \(O(nm^2)\) 的 dp,从前往后考虑每个环,记录 \(a_1\) 的取值。
精细分析一下,令 \(d=\gcd(n,m)\),则我们有 \(d\) 个长为 \(\frac nd\) 的环,注意到前面的代价可以刻画成 \(O(\frac nd)\) 段等差数列,于是使用单调队列优化 dp 即可做到 \(O(d\cdot \frac nd\cdot m)=O(nm)\)。
381 CF1740H MEX Tree Manipulation
为啥我感觉这题发过啊。
382 P9394 白鹭兰
点开洛谷月赛 => 看 C => 猜了个结论 => 结论对了 => 写不出来(其实我还不确定我的做法对不对,毕竟纯口胡!)。
手玩树的情况可知答案是选择一条链,链上每个点上面挂的子树大小和最大值。
\(k=1\) 时是经典的双极定向问题,之前的博客也提到过。
双极定向存在当且仅当图的圆方树是一条链,这与我们前面的猜测吻合,于是我们可以猜测答案是圆方树上选择一条链,链上每个点双的点挂着的点双大小和最大值。
这个可以通过换根 dp 求得。
考虑构造,我们从前往后依次考虑每个点双,做两极固定的双极定向,然后将所有点双的答案序列拼接,然后让答案序列每个点带上其挂着的所有点双。
问题来到了如何做两极 \(s,t\) 固定的双极定向,做法是:找一个过 \(s,t\) 的环(可以找一条路径,删掉后再找一条),以 \(s\) 为根建 dfs 树,要求这个环是树上带根的一个连通块,以这个环作为初始态做一遍开耳分解,然后依次给开耳分解的耳定向。
复杂度 \(O(n)\),代码难度极大。
upd:std 是上面链接中 CUREK 的大众做法,代码难度较低。
383 loj#6439. Popcount Xor
直觉的想法是从高到低考虑每一位,计算 \([T,T+2^b)\) 的答案,于是我们要计算的无非是 \(\oplus_{i=0}^{b}({b\choose i}\bmod 2)(t+i)\)(\(t\) 为 \(T\) 的二进制位数),即 \(\oplus_{i\subseteq b}(t+i)\)。
朴素数位 dp 可以做到 \(O(\log n)\),但我们有更优秀的做法。
枚举每一位 \(k\) 考虑其是否贡献,我们可以通过处理转化为求进位 \(\oplus_{i\subseteq s}[(t\bmod 2^k)+(i\bmod 2^k)\geqslant 2^k]\),即求多少 \(i\bmod 2^k>C\)。
注意到 \(s\geqslant 2^k\) 时答案为偶数,于是可以忽略 \(i\) 的取模。
令 \(s\) 最低一位 \(1\) 是 \(l\),那么 \(l\) 以下的位一定没有用,我们将 \(s,C\) 共同删去这些位。此时若 \(C\not\subseteq s\),答案一定为偶数(最后一位选择不影响)。
于是只需求 \(C\) 在 \(s\) 子集中大小排名,这只与 \(C\) 此时最低位有关。
枚举 \(k\) 复杂度仍为 \(O(n\log n)\),但上述两条限制对应合法 \(k\) 为一段区间,因此容易做到 \(O(n)\)。
384 CF1817E Half-sum
感觉没那么难。
将 \(a\) 排序后,选择的一定是一个后缀,且分配的 \(2\) 的幂次根据贪心决定,于是很容易模拟高精度做到 \(O(n^2)\) 的复杂度。
假设选择的是 \([1,k] [k+1,n]\),我们考察 \(k\) 变成 \(k+1\) 的影响,推一下可得 \((a_k-a_{k+1})2^{-k}+(a_{k+2}-a_{k+1})2^{-(n-k-1)}\)。
由于 \(a\) 是有序的,前者一定非正,后者一定非负。假设答案在数组的前一半靠前 \(C=\log V\) 的位置,根据 \(2\) 的幂次性质可知答案不会在第一个 \(a_i<a_{i+1}\) 后 \(C\) 步以上,故我们只需检查 \(O(C)\) 个位置,复杂度 \(O(n\log n)\)。

浙公网安备 33010602011771号