2023-7-13 #66 未成形的思绪 穿梭在脑叶和神经

发布时间 2023-07-13 16:16:06作者: xiaoziyao

——校长《脐》

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\) 的情况,仅有全零合法。

若问题在序列上,我们考察其前缀和,发现操作等价于交换前缀和相邻两个位置的值,于是答案为逆序对数量。

环上前缀和使用循环序列前缀和来刻画,即(好像在某题见到过这个技巧,不过忘了):

\[s_i=\begin{cases}0&i=0\\s_{i-1}+a_{i\bmod n}&i>0\end{cases} \]

记其反序表 \(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\)

写出式子:

\[\sum_{1\leqslant i,j\leqslant n.s_i>s_j}\lceil\frac{s_i-s_j}{s_n}\rceil-[i>j]\\=(\sum_{1\leqslant i,j\leqslant n,s_i>s_j}\lfloor\frac{s_i}{s_n}\rfloor-\lfloor\frac{s_j}{s_n}\rfloor+[s_i\bmod s_n>s_j\bmod s_n])-(\sum_{1\leqslant i,j\leqslant n}[i>j][s_i>s_j]) \]

二维数点即可,复杂度 \(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_i+w_j-2w_{\operatorname{lca}(i,j)}=d_i \]

首先容易确定 \(w\) 奇偶性,我们尝试类似地自下而上还原每一位,可以写出:

\[(w'_i+2^kc_i)+(w_j+2^kc_j)\equiv d_i\pmod {2^{k+1}} \]

此时可以确定 \(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\),即(类似地可以得到下面的式子):

\[f(a,b)=b(a+b-1)f(a-1,b-1)+(a-1)f(a-2,b+1)\\ f(a,b)=a(a+b-1)f(a-1,b-1)+(b-1)f(a+1,b-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)\),带入上面的式子容易得到:

\[f(a+1,b+1)=(a+1)(a+b+1)f(a,b)+bf(a+2,b-1)\\f(a+3,b)=b(a+b+2)f(a+2,b-1)+(a+2)f(a+1,b+1) \]

情况四是对称的,情况二只需使用一遍三,使用一遍四即可(注意某一维等于 \(0\) 的情况)。

由于最终状态可能不合法,也就是初始的 \(a,b\) 可能不为零,需要手动递推一下,复杂度 \(O(n\log n)\),瓶颈在并查集。