CF 做题记录(12月)

CF2172B Buses

首先我们可以转换参考系,以公交车为参考系,问题变成一个追及问题,容易发现最优策略是人不断往终点走,遇到公交车就坐上

画 \(s-t\) 图(\(s\) 为到终点的距离),那么每辆公交车的速度为 \(0\),相当于一条平行于 \(x\) 轴的线段,终点的运动图像为一条斜率为 \(x\),过原点的直线

考虑人的图像,\(y\) 轴截矩是 \(L - p\),斜率是 \(x - y\),那么,每当这条直线与一条线段相交时,就会沿线段走到末端,再继续上升,直到与 \(s = xt\) 相交,这样就可以递推

所以,我们就要求两个东西:与 \(s - s_0 = (x-y)(t - t_0)\) 相交的纵坐标最小的线段(公交车),以及直线与 \(s = xt\) 的交点

第二个是好求的,来看第一个

设满足条件的线段右端点为 \((a, b)\)

那么,该线段一定高于直线的出发点,即 \(b \ge s_0\)

并且,要有交点,即 \((x-y)(a - t_0) + s_0 \ge b\),移项同构,得 \((x-y)a - b \ge (x-y)t_0 - s_0\)

将每辆公交车对应的线段按纵坐标从达到小排序,\(L_i = (t_i, s_i)\),为线段右端点,记 \(f(i) = (x - y)t_i - s_i\)

那么上述条件等价于求满足 \(j < i, f(j) \ge f(i)\) 的最大的 \(j\),这个可以用单调栈做

于是就可以愉快地递推解决了

CF2171E Anisphia Wynn Palettia and Good Permutations

首先,看到互质,先考虑奇偶性,所以我们考虑让每三个数里面都有两个偶数,即构成

奇 偶 偶 奇 偶 偶 奇 ......

的结构

但是,很容易发现偶数是不够用的,那么具体不够用到什么程度呢?我们可以粗略估计一下

每两个偶数都可以带上一个奇数,所以总共能够带上 \(n / 4\) 个奇数,还有剩下 \(n / 4\) 个数留在末尾

所以,问题在于中间两个数不太够用,这时我们想到,可以寻找偶数的替代品,其实,只要中间两个数有公因数即可,所以可以利用 \(3\) 的倍数。

那么,我们现在可以利用的数就是 \(3\) 的倍数或偶数,这样的数共有约 \(\frac{2}{3}n\) 个,根据上面的分析,一共能带上约 \(n/3\) 个除此之外的数,这样就够了

题目中所说的 \(6\) 个容错位置主要就是给不能刚好匹配够,以及 偶数 与 三的倍数 交界的地方

CF2165C Binary Wine

首先容易发现,每个 \(b_i\) 两两之间一定没有重复的位,这样肯定更优

所以现在就是要把 \(c\) 的每一位分配到一个 \(a_i\) 上,使得总代价最小

首先从大到小考虑有值的位,那么肯定选择最大的数分配给它,这个可以根据邻项交换证明,然后分配后就变成了一个 \(c\) 更小,\(a\) 不同的子问题

那么用优先队列实现就可以了

CF2165B Marble Council

从众数出发,我们考虑一种极端情况,如果一些数全部相同,那么众数就是那一个值

进而,我们假设已经确定了集合 \(s\),然后构造出一种能得到 \(s\) 的方案

首先,对于 \(s\) 中出现的数 \(x\),如果一个集合的众数不为 \(x\),就不向这个集合分配 \(x\)

现在,每个集合里只有一种数,那么每个集合最多可以容纳的同一种值的数的个数就是当前的集合大小

例如,\(s = \{1, 2, 2, 2\}, a = [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3]\)

那么以下是一种可能的集合分配

\(x_1 = \{1, 1, 1, 1\}\)
\(x_2 = \{2\}\)
\(x_3 = \{2, 2, 2\}\)
\(x_4 = \{2, 2\}\)

上面,\(2\) 的分配方式是可变的

现在我们要将 \(3\) 分配到每一个集合中,那么每个集合分配的 \(3\) 的个数不能超过该集合的大小,例如,\(x_2\) 中至多分配 \(1\) 个 \(3\),\(x_3\) 中至多 \(3\) 个

这样一来,即 \(v\) 在 \(a\) 中的出现次数为 \(c_v\),我们会发现,对于任意一个没有在集合中 \(s\) 中的数 \(x\),有

\[c_x \le \sum_{v \in s} c_v \]

这里求和号对相同的 \(v\) 只会记一次

于是我们考虑枚举没在集合中出现的数的 \(c\) 的最大值,即将数字按 \(c\) 排序,得到序列 \(C\),考虑每出现在 \(s\) 中最靠后的元素,记该数字为 \(p\)

容易发现,当 \(p\) 不是 \(C\) 中最后一个,上述条件自动满足,当 \(p\) 是最后一个时,跑个背包计算满足上述条件的方案数即可

Good Bye 2025

E

交互题

感觉一开始没有任何想法,我首先考虑了两种操作对总和即长度的影响

Flatten 不会改变一个序列的总和,但会使序列长度 \(+1\)
Concatenate 会使总和翻倍,两序列长度均变为他们的长度之和,但这似乎不太好具体刻画

好吧,那我们可以从总和翻倍开始,二分找到前缀和为总和一半的位置 \(p\),如果之前有过合并,\([1, p]\) 就是合并前的 \(a\) 序列经过几次推平的结果,\([p+1, n]\) 同理

但是即使这样,我们也只能得到一些划分,并不能得到最大值,而且由于我们不确定最大值在哪边,必须进行双边递归,复杂度也完全失败了

还剩下一个关键的量——长度

考虑找到分界点后选择一边,进行单边递归,根据直觉,我们显然应该选长度小的一边,因为那一边更紧凑,进行的 Flatten 操作也就更少,它的最大值一定大于等于另一边的最大值

考察有过拼接以及没有经过拼接的两种情况,我们可以分别说明上面的策略是对的

那么,我们只需要一直单边递归,在每一层找分界点,直到区间内只有一个数,它就是最大值,询问次数 \(O(log^2 n)\),完美

F

猜猜乐

首先感觉没什么思路,先观察点性质,比如样例中答案均为 \(2\) 的幂

操作是可逆的

然后想下能不能由合法的树变到当前的树,感觉很困难,放弃

欸,这题跟奇偶性相关,那么加上偶数显然不会改变数的奇偶性,所以进行操作后不在选中子树中的节点颜色都不变

这个看着好像很有用

所以现在我们不太清楚的就是子树当中结点的颜色变化,考虑从一些特殊情况入手

首先,如果我们新连的边连的是原来子树的根,那么子树中颜色不变

那我们考虑能否将所有情况都转化成上面这种情况,也就是说,我们要将一次操作分解成多次不变根的操作

略加思考,一种想法是将子树按白点分解,逐个处理

现在,我们有一堆仅有根节点是白点的子树,考虑将他们连到树上会发生什么,我们惊奇地发现,这棵子树上仍然仅有一个白点,且是该子树新的根

这样,整个题目就基本解决了,接下来为了让所有白点都在一条到根的路径上,只需将所有连通块连成一条链,统计方案数即可

G

妙妙题,学到了异或哈希

首先,容易想到的是每条弦所在的链的个数 \(=\) 以它结尾的链的个数 \(\times\) 以它开头的链的个数

记以弦 \(i\) 结尾的链的个数为 \(f_i\)

那么我们可以每次计算出来这个值然后判断它是否是偶数——显然不行

于是我们查看题解,发现了神奇的异或哈希

实际上,上述算法有两个瓶颈,一是每次计算 \(f_i\) 需要 \(O(n)\) 时间,二是由于 \(l\) 从 \(1\) 变化到 \(n\) 的缘故,后半部分很难以 \(O(n)\) 或更低复杂度计算,于是乎我们考虑删去第二部分,优化第一部分

如果我们能具体地维护出每条链就好了,这样我们只需要看在这些链并起来的可重集中是否每个元素都出现偶数次就行了

那么,查看是否出现偶数次怎么做?用异或,我们把弦的编号异或起来,如果最后结果是 \(0\),那么每个元素都出现偶数次

但是,我们不可能具体维护每条链,不过,根据我们的检查方法,只需要维护链上弦编号的异或和即可,设以 \(i\) 结尾的所有链上弦的异或和为 \(g_i\),那么

\[f_i = (\bigoplus_{j < i \land i \cap j} f_j )\oplus 1 \]

\[\begin{aligned} g_i &= [\bigoplus_{j < i \land i \cap j} g_j \oplus(f_j\times w_i)]\oplus w_i \\ &= \bigoplus_{j < i \land i \cap j} g_j \oplus (w_i \times \bigoplus_{j < i \land i \cap j}f_j) \oplus w_i \\ &= \bigoplus_{j < i \land i \cap j} g_j \oplus (w_i \times f_i) \\ \end{aligned} \]

这里,为了减少冲突,我们不直接使用弦的编号,而是为每条弦赋一个较大的随机权值 \(w_i\)

注意在这两个式子中,由于我们只关注奇偶性,\(f_i\) 均是模 \(2\) 的结果

最后,我们如何处理两区间(弦)相交这一条件呢?容易发现当两个区间相交并不相包含时,区间内仅有另一区间的一个端点,于是又可以利用异或的性质,将 \(f_i, g_i\) 都挂到区间端点上,计算时直接查询区间内点值的异或和即可,这个可以用树状数组做

posted @ 2025-12-28 19:58  zhm0725  阅读(46)  评论(0)    收藏  举报