2023-7-13 #66 未成形的思绪 穿梭在脑叶和神经
——校长《脐》
459 CF1326F2 Wise Men (Hard Version)
感觉有点奇怪。
肯定要把 \(0\) 容斥掉,于是只需计数给定将图划分成给定长度的链方案数,容易发现链长无序,因此只需计算 \(p(n)\) 种情况。
要求将图不交划分有点困难,类似子集卷积,我们添一元 \(t\) 表示点数,若这些链并集为全集且点数为 \(n\) 一定符合要求。
接下来我们在 dfs 分拆的过程中维护当前分拆的子集卷积(注意此时 \(t\) 的次数固定,只需维护 FMT 点值做到 \(O(2^n)\) 转移),复杂度应该是 dfs 树结点数乘 \(2^n\) 的。
460 CF1322E Median Mountain Range
01 规划,容易发现 00 与 11 永远不会变化,按照这些位置将序列划分成若干 01 交替段,容易模拟出结果是一半等于左边界值,一半等于右边界值。
回到原问题,我们需要支持插入删除划分点,我们每次处理影响到的段,将这个段的结果模拟出来,若左边界已经被加入则对左侧一半未赋值的数做覆盖,右侧类似。
复杂度 \(O(n\log n)\)。
461 CF1746E2 Joking (Hard Version)
打那场 CF 的时候刚考过类似的题目,可是场上还是没做出来,wtcl。
我场上好像一直在冲 F 的分块。
我们在询问的过程种中维护两个集合 \(T,F\),表示若上次回答是真/假对应的可能值集合,可以证明其不交。
考虑询问 \(T_0\cup F_0(T_0\subseteq T,F_0\subseteq F)\) 得到的信息:
若回答为 YES
,那么 \(T\leftarrow T_0\cup F_0,F\leftarrow T-T_0\),另一种情况同理。
考虑直接 dp 出最优决策点,但数据范围过大,我们在 \(n\geqslant B\) 时直接将 \(T,F\) 劈成两半,小的时候 dp 即可。
462 CTT2019 Day3T2 数圈
怪。
特判掉 \(\sum a_i\leqslant 0\) 的情况,仅有全零合法。
若问题在序列上,我们考察其前缀和,发现操作等价于交换前缀和相邻两个位置的值,于是答案为逆序对数量。
环上前缀和使用循环序列前缀和来刻画,即(好像在某题见到过这个技巧,不过忘了):
记其反序表 \(t_i=\sum_{j>i}[s_i>s_j]\),我们考察 \(\sum_{i=1}^n t_i\) 的变化(注意,这里的求和是有限的):
首先其一定有限(因为 \(\sum a_i>0\)),而且操作一次带来的影响恰好只有一次 \(\operatorname{swap}(x,x+a)\) 的影响,即 \(a_i<0\) 使得其减一,\(a_i>0\) 使得其加一,我们的目的是使其归零,于是答案即为 \(\sum_{i=1}^n t_i\)。
写出式子:
二维数点即可,复杂度 \(O(n\log n)\)。
463 CF1842G Tenzing and Random Operations
非常精巧的题目。
我们若确定了具体操作,答案的组合意义即从前往后,要么取某个操作的 \(v\),要么取 \(a_i\) 所有方案权值和。
从前往后 dp 的过程中决定每个操作的位置。具体地,我们只需区分之前选过的操作,以及未选的操作,这个信息量是 \(O(n)\) 的。于是转移即分讨:选择 \(a_i\),选择已选的 \(v\),选择未选的 \(v\) 即可,复杂度 \(O(n^2)\)。
464 CF1842H Tenzing and Random Real Numbers
我们关心的事实上是 \(x_i,1-x_i\) 的大小关系,而大小关系还取决于每个点与 \(0.5\) 的大小关系,我们不妨暴力枚举哪些点 \(<0.5\),此时问题变为拓扑序计数,可以做到 \(O(4^nn)\),优化一下可以做到 \(O(3^nn)\)。
事实上拓扑序的计数只需知道当前点与 \(0.5\) 的大小关系,与前面选择过的点与 \(0.5\) 大小关系无关。我们直接在外层做拓扑序计数,转移时判断当前点能否选择 \(<0.5\) 或者 \(>0.5\) 即可,复杂度 \(O(2^nn)\)。
upd:看到了一个更好的理解。
大概是令 \(a_i\leftarrow a_i-0.5\),限制变为 \(a_i+a_j\) 大于等于或小于等于 \(0\)。
一个观察是若 \(|a_i|>|a_j|\),那么限制只与 \(a_i\) 正负性相关,于是按照绝对值从小到大状压 dp 即可,写出来和上面是一致的。
465 CF1842I Tenzing and Necklace
神秘题,不知道怎么想出来的,复读一下官方题解。
下述所有结论均没有证明过程,若有兴趣可以看官方题解或自己手动模拟。
假设加上了限制“必须割去 \(m\) 条边”,我们考察任意两组割边方案 \(a_1<a_2<\cdots<a_m\) 与 \(b_1<b_2<\cdots<b_m\),假设这两组方案是固定 \(a_1/b_1\) 后的最优解,那么有如下结论(不妨令 \(a_1<b_1\)):
- 可以只调整 \(b_{2,3,\cdots,m}\) 满足 \(\forall_i b_i\geqslant a_i\),且代价不增;
- 若 \(b_1>a_2\),可以只调整 \(b_{1,2,\cdots,m}\) 满足 \(b_1\leqslant a_2\) 且代价不增;
- 在前两者基础上,可以只调整 \(b_{2,3,\cdots,m}\) 满足 \(\forall_{i<m} a_i\leqslant b_i\leqslant a_{i+1}\),且代价不增。
于是我们可以先计算出强制割去 \((n,1)\) 的最优解(使用单调队列优化 dp),接下来分治——令 \(\operatorname{solve}([l_1,r_1],[l_2,r_2],\cdots,[l_m,r_m])\) 表示要算出第 \(i\) 处割在 \([l_i,r_i]\) 内的最优解。
容易计算出第一刀割在 \(\lfloor\frac{l_1+r_1}{2}\rfloor\) 处的最优解,接下来递归即可。
可以分析出复杂度为 \(O(n\log k)\)。
一般的情况可以类似地证明,对于初始方案,\(m\) 最多上下变化 \(1\)。
466 CF1844G Tree Weights
不会做啊,这咋想到的。
首先容易确定 \(w\) 奇偶性,我们尝试类似地自下而上还原每一位,可以写出:
此时可以确定 \(c_i\bmod 2\) 与 \(c_j\bmod 2\) 的关系,于是可以确定这一位的所有值,复杂度 \(O(n\log V)\)。
467 CF1844H Multiple of Three Cycles
场上一直在 GF,但不会算积分!!
首先我们只关心长模 \(3\) 为 \(1,2,0\) 的链数量 \(a,b,c\),容易发现 \(c\) 没用,只需在圆排列中选择位置插入,将答案乘上 \(a+b+c\) 就可以变成 \(c\leftarrow c-1\) 的情形。
记答案为 \(f(a,b)\),类似上面去除 \(0\) 的方法,我们尝试将 \(1\) 在最后选择位置插入——若插在一个 \(2\) 后面,其会绑定成 \(0\),可以使用上面的方法将 \(0\) 消去;若插在一个 \(1\) 后面,其会绑定成一个 \(2\),即(类似地可以得到下面的式子):
同时可以发现,这题给出的 \(a,b\) 序列有特殊性质——一次操作只会有以下情况(不妨时光倒流,这样讨论起来方便一点):
- \(a,b\) 不变(拆分一个 \(0\));
- \(a,b\) 均加一(拆分一个 \(0\));
- \(a\) 减一,\(b\) 加二(拆分一个 \(1\));
- \(b\) 减一,\(a\) 加二(拆分一个 \(2\))。
尝试使用上面的式子建立递推,具体地我们维护目前的 \(f(a,b)\) 与 \(f(a+1,b+1)\),尝试计算出 \(f(a+2,b-1)\) 与 \(f(a+3,b)\),带入上面的式子容易得到:
情况四是对称的,情况二只需使用一遍三,使用一遍四即可(注意某一维等于 \(0\) 的情况)。
由于最终状态可能不合法,也就是初始的 \(a,b\) 可能不为零,需要手动递推一下,复杂度 \(O(n\log n)\),瓶颈在并查集。