CF 杂题乱做 #2

CF 杂题乱做 #2

今天只有残留的躯壳
迎接光辉岁月
风雨中抱紧自由

Problem A. CF2191D2 Sub-RBS

先考虑 D1。枚举 \(s,t\) 第一个不相同的位置 \(p\),那么 \(s_i=)\)\(t_i=(\)。设当前 \(t\)\(x\) 个未匹配左括号,那么就需要在 \(p\) 后面找出 \(x\) 个右括号。显然这些右括号越靠后越优。

设第一个右括号位置为 \(q\),那么还要从 \([p+1,q-1]\) 中找出一个最长的子序列,使得拼上它依然是合法括号串。由于 \(s\) 本身是合法的,\([p+1,q-1]\) 必定可行(相当于 \(p\) 前面删除了 \(y\) 个右括号,\(q\) 后面删除了 \(y\) 个左括号,剩下部分仍然合法)。枚举 \(p\) 算答案即可。


再考虑 D2。可以发现,\(p\) 前面删除了 \(>1\) 个右括号一定不优,否则只删除最后一个一定不劣。进一步地,可以发现,\(t\) 合法且包含 \()((\) 作为子序列,则答案为 \(|t|-2\),否则为 \(0\)。以此做 dp 即可。

Note:对 RBS 的理解不够深刻。

Problem B. CF2191E Comparable Permutations

\(p\) 已知,那么枚举 \(p,q\) 第一个、最后一个不相同的位置,设为 \(i,j\)。那么需要 \(q_i>p_i,q_j>p_j\)\([i,j]\) 中最小的比 \(p_i\) 大的元素放到 \(i\),其余升序排列即可。容易看出 \(i,j\) 合法的充要条件为 \(p_i,p_j\ne \max_{i\le k\le j} a_k\)

我们希望 \(i\) 尽量靠后,在此基础上 \(j\) 尽量靠后。从后向前枚举 \(i\)。维护 \([i,n]\) 的单调递增栈,找到最后一个不在栈内的位置 \(j\),合法当且仅当 \(j\) 在栈的次顶元素之后。继续发现,若次顶元素不是 \(i+1\) 那么 \(i\) 一定不优,若 \(i+2\) 在栈内一定不优。 也就是说,\(i\) 就是最后一个满足 \(a_i<a_{i+1},a_{i+1}>a_{i+2}\) 的位置

\(n\) 次询问找到 \(i\)后面的元素一定先递减再递增,可以 \(n\) 次操作排序,然后再 \(n\) 次操作找到第一个比 \(p_i\) 大的 \(j\),共 \(3n\) 次操作。

Note:寻找最优解结构,及时排除不优选项。

Problem C. CF2191F Prufer Vertex

\(P(T)\) 就是从 \(n\)\(n-1\) 路径上第二个节点

首先判掉 \(n,n-1\) 在一个连通块里的情况。

枚举 \(v\),若 \(n,v\) 不连通就用一条边连起来。然后来算 \(n-1\) 连到 \(v\) 子树内的方案数。设 \(n\) 所在连通块为 \(C\)。首先把 \(C\) 之外的该连的连,然后把得到的新连通块直接连到 \(C\) 上。可以发现,\(n-1\) 所在的连通块连到哪一个点上方案数都相同。所以设 \(v\) 子树集合为 \(S\),合法方案占总方案的 \(\frac{|S|}{|C|}\)

分讨 \(v,n-1\) 是否连通,算出总方案数,乘上 \(\frac{|S|}{|C|}\) 即可。

Note:没发现 \(C\) 中点的对称性。

Problem D. CF2191G Median Permutation

牛题。

\(f(p)_i=f(p)_j\),那么 \(|i-j|\le 2\)。对所有不合法情况讨论:

  • \(f(p)_{i-1}=f(p)_{i+1}=i\)。此时 \([i-2,i+2]\)\(5\) 个元素构成一个 W 形或 M 形。

    假设 \(p_{i-2},p_{i+2}>p_i\),要想合法,\(p_{i-1},p_{i+1}>p_i\)所以 \(i\) 不会出现在 \(f(p)\) 里,即 \(p_i=1\)

    \(p_{i-2},p_{i+1}<p_i\)合法则 \(p_i=n\)

  • \(f(p)_{i-1}=f(p)_i\)。此时 \([i-2,i+1]\) 四个元素构成 ^ 或 v 形。

    假设 \(p_{i-2}<p_{i}\)\(p_{i-1}<p_{i+1}\) 必定合法;否则,只有 \(\left<1,4,2,3\right>,\left<3,2,4,1\right>\) 合法,即 \(p_{i-1}>p_{i-2}\land p_{i+1}>p_i\)\(p_{i-1}<p_{i-2}\land p_{i+1}<p_i\)

继续得出结论:

  • 对奇偶下标进行分类,每一类都是单峰或单谷

  • \(p_x=1\)\(x\) 为奇数,必定有 \(p_1<p_2\),否则 \(p_1>p_2\)

  • \(n-x+1\) 为奇数,必定有 \(p_n<p_{n-1}\),否则 \(p_n>p_{n-1}\)

这样就可以拆出两条 \(1\) 开始、从 \(n\) 结束、元素递增 的链(下标不一定单调)。向链里填数的过程可以看做在二维格点上走,有若干条必须经过的边,二项式系数计算即可。

Note:分讨出不合法的情况,却没有看到深层的性质。没有想到按奇偶性讨论。

Problem E. CF2187B Shortest Statement Ever

判掉 \(X \& Y=0\) 的情况。

\(X\& Y\) 的最高位为 \(2^b\)。拆开绝对值:

  • \(p\le X\land q\le Y\)。此时要最大化 \(p+q\)。将 \(p\)\(2^b\) 位设为 \(0\),低位全 \(1\)\(q\)\(2^b\) 位设为 \(1\),低位全 \(0\) 即可。

  • \(p\ge X\land q\le Y\)。找到一位 \(>2^b\)\(X\)\(0\) 的位 \(2^c\),将其设为 \(1\),低位全设 \(0\)。此时 \(q\) 可以不变。

  • \(p\le X\land q\ge Y\),对称。

  • \(p\ge X \land q\ge Y\),需要分别找。

直接枚举是 \(O(\log^2 V)\) 的。

第四种情况一定不优于二、三:较低的那个可以不变。降为 \(O(\log V)\)

二、三只有 \(2^{b}\) 上面第一个为 \(0\) 的有用:变更更高的位代价一定 \(\ge 2^{b+1}\),而第一种代价一定 \(\le 2^{b+1}\)

只有三种情况,\(O(1)\)

Problem F. CF2187D Cool Problem

???

\[\begin{gathered} c_i=c_{i-1}+x \Leftrightarrow c_i-\frac{x+y}{2}=c_{i-1}+\frac{x-y}{2}\\ c_i=y-c_{i-1} \Leftrightarrow c_i-\frac{x+y}{2}=-c_{i-1}-\frac{x-y}{2} \end{gathered} \]

只有正负号不一样,所以

\[\begin{gathered} \left(c_i-\frac{x+y}{2}\right)^2=\left(c_{i-1}+\frac{x-y}{2}\right)^2\\ c_i^2-c_{i-1}^2-(x+y)c_i-(x-y)c_{i-1}+xy=0\\ \sum_{i=1}^n(c_i^2-c_{i-1}^2-(x+y)c_i-(x-y)c_{i-1}+xy)=0\\ c_n^2-2x\sum c_i+(x-y)c_n+nxy=0\\ f(s)=\frac{c_n^2+(x-y)c_n+nxy}{2x} \end{gathered} \]

只需求出 \(c_n\) 的所有取值。\(c_n=ax+by\),其中 \(b\in\{0,1\}\)。bitset 优化。

Note:\(x=\frac{x+y}{2}+\frac{x-y}{2},y=\frac{x+y}2-\frac{x-y}{2}\);同构。

Problem G. CF2187E Doors and Keys

这个人会因为要拿钥匙而回去,不太好处理。

改变贡献计算方式,考虑穿过某道门多少次。若携带 \(j\) 个钥匙穿过,那么产生 \(\max(1,2j-1)\) 的代价。

所以我们可以把钥匙一次性都带到身上。设 \(f_{i,j}\) 为走到 \(i\),身上有 \(j\) 个钥匙的最小代价,转移平凡。

继续观察,若身上携带 \(j\) 个钥匙,则要消耗 \(2j-1,2j-3,\cdots\) 的代价,这也意味着身上不会携带超过 \(\sqrt{\max(a_i)}\) 个钥匙,否则不如等着门开。降为 \(O(n\sqrt{a_i})\)

Note:拆贡献;等差数列与根号。

Problem H. CF2187F1 Al Fine

首先重标号把 \(a\) 变为 \(\{1,2,3,\cdots,n\}\)

Dfs 序,可以用来刻画子树。若 \(a[l,r]\) 对应一棵子树,那么需要存在 \(b\) 的一个区间 \([L,R]\),使得 \(b_L=\min_{i=L}^R b_i=l\),且 \(\max_{i=L}^R b_i-\min_{i=L}^R b_i=r-l=R-L\)

也就是说,\(b[L,R]\) 能够对应一棵子树,当且仅当 \(b_L=\min_{i=L}^R b_i,\max_{i=L}^R b_i-\min_{i=L}^R b_i=R-L\)

对于一个 \(L\),我们希望其对应的 \(R\) 尽量大。与其把右边一段另化为若干棵子树,不如直接包含进来。令 \(f_L\) 表示最大合法 \(R\),所有的 \([i,f_i]\) 一定要么相离,要么包含,用栈模拟一下 dfs 过程即可求最大深度。

接下来求 \(f_L\)。注意到 \((\max_{i=L}^R b_i-\min_{i=L}^R b_i)-(R-L)\ge 0\),线段树+单调栈维护这个,区间查询最后一个 \(0\) 的位置即可。

Note:dfs 序与子树。

Problem I. CF2176F Omega Numbers

一开始还在想 \(\omega(xy)\) 就是把两个质因子集合取并,然后由于可能的元素有很多,所以没法直接做。没发现 \(|A_i \cap A_j|=\omega(\gcd(a_i,a_j))\)

观察 1:\(\omega(xy)=\omega(x)+\omega(y)-\omega(\gcd(x,y))\)

观察 2:\(\omega(a_i)\le 6\)

所以只需要对于每个 \(c,d\) 求出 \(\omega(a_i)+\omega(a_j)=c\) 而且 \(\gcd(a_i,a_j)=d\)\(i,j\) 对数即可。

\(\gcd(a_i,a_j)=d\) 不好做,但是 \(d\mid \gcd(a_i,a_j)\) 是好做的,只需 \(d\mid a_i \land d \mid a_j\)。可以狄利克雷后缀和求出。然后再做一次狄利克雷差分计算最终答案。

Problem J. CF1536E Omkar and Forest

???

确定了 \(0\) 的位置之后,非零的值就确定了,一定是到最近的 \(0\) 的距离(考虑它从 \(0\) 一路增长过来的过程)。

由于不可能全为 \(0\),所以答案为 \(2^{c_\#}-[c_\#=nm]\)

Problem K. CF2193H Remove the Grail Tree

首先把所有的 \(a_i\) 变为 \(a_i \bmod 2\)。设 \(b_i\)\(i\) 和其邻居的 \(a\) 异或和,那么 \(i\) 可删除当且仅当 \(b_i=1\)。删除 \(i\) 后,若 \(a_i=1\),那么翻转所有邻居的 \(b_x\),否则没有影响。

执行树形 dp 来判定是否有解。每个点有三种状态:\(0\) 表示无解,\(1\) 表示必须先于父亲删除,\(2\) 表示必须后于父亲删除,\(3\) 表示都可以。

只需对先于父亲、后于父亲判定是否可行即可。可行当且仅当 \(b'_x=1\),或者存在一个儿子 \(y\) 满足 \(f_y=3\land a_y=1\)

最后做一遍拓扑排序求最终操作序列就做完了。

Problem L. CF2084E Blossom

把贡献拆给每个子区间,再把 \({\rm mex}(l,r)\) 拆为 \(\sum_{v\ge 0} [{\rm mex}(l,r)> v]\)

枚举 \(v\),这要求 \([0,v]\) 都要出现。只有完全包含已经出现的 \([0,v]\) 内的所有元素,\(l,r\) 才合法。对于合法的 \(l,r\),设 \(c_1\)\(a[l,r]\)\(-1\) 个数,\(c_2\)\([0,v]\) 中未出现的个数,\(c_3\) 为序列内 \(-1\) 总个数,那么方案数为 \(\binom{c_1}{c_2}\times c_2! \times (c_3-c_2)!\)

直接做是 \(O(n^3)\) 的。对于固定的 \(v\),其 \(c_2\) 的值是固定的,那么只需要对于每个 \(c_1\) 统计 \(l,r\) 的数量即可。\(v\) 增大,合法区间集合只会缩小,可以均摊 \(O(n^2)\) 维护。最后简单统计一下答案就行了。

拆贡献,寻找固定值、单调值。

Problem M. CF2066D2 Club of Young Aircraft Builders

考虑转化一下条件:

  • \(1\) 只能填在 \([1,c]\) 内;

  • \(2\) 只能填在 \([1,c+cnt_1]\) 内;

  • \(\cdots\)

所以 \(i\) 只能填在 \([1,c+\sum_{j<i} cnt_j]\) 内。这个条件就舒服多了。

\(f_{i,j}\) 为考虑完了 \(1\sim i\),填了 \(j\) 个数的方案数,转移系数是简单的二项式系数。\(O(n^2c^2)\)

Problem N. CF2077C Binary Subsequence Value Sum

首先 \(F(v,l,r)\) 就是把 \(0\) 变为 \(-1\) 求和。

然后由于 \(xy\le (\frac {x+y} 2)^2\),所以希望两部分尽量靠近。所以序列权值为 \(\lfloor \frac {sum} 2\rfloor \lceil \frac{sum} 2 \rceil\)

到这里我选择了直接基于这个 dp,但是会带来冗杂的奇偶性讨论,很不简洁。

\(sum\) 为偶时,权值为 \(\frac{sum^2}{4}\);否则为 \(\frac{sum^2-1}{4}\)\(sum\) 为奇,当且仅当序列长度为奇。而长为奇的子序列共有 \(2^{n-1}\) 个,直接减去即可。那么接下来需要计算 \(sum^2\) 的和。

\((sum^2)=(c_1-c_0)^2=c_1^2+c_0^2-2c_0c_1\)。设序列中共有 \(x\)\(0\)\(y\)\(1\),那么答案为

\[\begin{aligned} & 2^x\sum_{i=0}^y \binom y i i^2+2^y\sum_{i=0}^x \binom x i i^2-2\sum_{i=0}^x\sum_{j=0}^y \binom x i \binom y j ij\\ &= 2^{x+y-2}y(y-1)+2^{x+y-2}x(x-1)-2^{x+y-1}xy \end{aligned} \]

维护 \(x,y\) 即可。

posted @ 2026-01-19 16:15  XP3301_Pipi  阅读(44)  评论(0)    收藏  举报
Title