代码源2025长训_csp-s_week2

10/14 Day 18

A

题意:给定字符串 \(S\),每次操作可以对三个连续的字符进行以下四种的变换:

  • \(\texttt{ABC} \to \texttt{CBA}\)
  • \(\texttt{CBA} \to \texttt{ABC}\)
  • \(\texttt{BCD} \to \texttt{DCB}\)
  • \(\texttt{DCB} \to \texttt{BCD}\)

\(S\) 通过任意次操作能得到多少种不同的字符串,对 \(10^9+7\) 取模。

题解:发现题目的操作就是 A,C 换位,B,D 换位。所以将 A,C 和 B,D 分别看作另一类。若两个相邻位置是同类,则两侧无法互相影响,在这里分段,总答案就是每段答案之积。发现每段内 A,D 相对位置固定无法改变(D只能通过C左右移动)。则每一段内,就是选若干奇数下标放 A,又选若干偶数下标放 D,使得所有 A,D 相对顺序不变,方案数即为一个组合数。总复杂度 O(n)。

B

题意:初始可重集 \(S\) 包含 \(n\)\(1\)

一次操作:选择两个不同元素 \(x \le y\),删除 \(x, y\),加入 \(2x\)\(y - x\)

目标使集合中非零数的个数最少。

要求给出一种操作序列,步数 \(\le 2n\)

题解:先尽力全搞,然后剩 \(\log n\) 个每次一直拿最大跟最小操作贪心地搞最后一定行;具体就是一直拿出最大的位,与最小的位操作一次,使其进位。此时若最小位等于次小位了,则将这两个位合并;否则,依然拿最大位剩余部分与其合并。这样每次一定可以进位,重复直到只剩两个数。

D

题意:有一个 \(K\)\(N\) 阶超立方体,包含 \(N^K\) 个单位超立方体。

\(f(i,j)\) 表示所有第 \(i\) 维坐标为 \(j\) 的格点的颜色集合(去重)。

要求:对于每个维度 \(i\),可重集 \(\{f(i,0), f(i,1), \dots, f(i,N-1)\}\) 相同。

构造一个涂色方案,使得使用的颜色数量最多。

题解\(k=2\) 沿对角线对称就最优。\(k=3\) 发现如果对于 \((i,j,k),i\neq j,j\neq k,k\neq i\) 那么只能同时选 \((j,k,i),(k,i,j)\) 最好;但是如果对于 \((i,i,j)\) 那么只选 \((j,j,i)\) 也能满足,同时显然更优,于是就像这样维护。\(k=4\) 同理,比如两个一样(例 \((i,i,j,k)\))三个一样(\((i,i,i,j)\))都这样做即可。

10/16 Day 19

A

题意:给定长度为 \(n\) 的数组 \(a_1, a_2, \dots, a_n\)

一次操作:选择一个元素,将其删除后插入到数组的开头或末尾。

求最少操作次数,使得数组非严格递增(相同数字可任意排列)。

题解:可以考虑像倒着做,每次删掉数组的开头或结尾;发现可能是最后剩一小段,发现一定是值域上的连续一段同时是原序列上的子序列,但是细节和方案非常多,用 dp 的方法做即可。

B

题意:给定长度为 \(n\) 的整数序列 \(a_1, a_2, \dots, a_n\)

定义:\(f(k) = \max_{r-l+1 = k} \ \text{mex}\{a_l, a_{l+1}, \dots, a_r\}\)

其中 \(\mathrm{mex}(S)\) 表示 \(S\) 中未出现的最小非负整数。

\(q\) 次询问,每次给定 \(k\),输出 \(f(k)\)

题解:介绍一个叫做支配对的技巧,也即例如对于这道题来说,有两区间 A 和 B,A 包含 B 且 B 的 \(\text{mex}\) 更优那么我们就只考虑 B 而不考虑 A 的答案。

考虑如何求 mex,扫描右端点,发现对于某些左端点它们当前的 mex 相同,便可以用单调栈维护下来 mex 值变化的左端点。

考虑求值,设 \(p_x\) 表示上一个 \(x\) 的出现位置,那么当 \(l\leq \min_{i=0}^k p_i\) 时,有 mex 大于 \(k\);所以相当于在维护 \(p\) 的前缀最小值。倒序扫描右端点,每次变小一个 \(p_i\),这时单调栈上会有一段后缀的值不要了,把这些位置弹掉并“记录这些栈顶和当前右端点的答案”(这里就是在统计了有用的支配对)。最后求贡献就好。

10/18 Day 20

A

题意:有 \(n\) 名参赛者,编号 \(1 \dots n\),蜗蜗是 \(1\) 号。

\(i\) 名参赛者的基础测试分数为 \(a_i\)

实战评级名次为 \(1 \dots n\) 的一个排列,第 \(j\) 名获得分数 \(p_j\),保证 \(p\) 非递增。

最终得分 = 基础分 + 实战分。

最终排名定义为:严格高于自己得分的人数 \(+1\)。蜗蜗希望最终排名 \(\le x\)

问:无论其他 \(n-1\) 人实战名次如何分配,蜗蜗的最终排名都能 \(\le x\) 的前提下,他在实战评级中可以取得的最差名次 \(j\) 是多少?

题解:二分答案,然后贪心使得蜗蜗排名最小判断可行性即可

B

题意:有 \(2n\) 个盒子排成一行,包含 \(n\) 种礼物,每种礼物恰好出现两次。

游戏规则:

  • 每回合必须打开两个盒子。
  • 如果已知两个相同礼物的位置且未打开,则直接打开并移除它们。
  • 否则,打开最左边的未打开过的盒子:
    • 若之前见过相同礼物,则打开对应的另一个盒子并移除。
    • 若未见过,则再打开下一个最左边的未打开过的盒子:
      • 若两个礼物相同,则移除;
      • 若不同,则关闭这两个盒子(但已知它们的位置和类型)。

\(q\) 次交换操作,每次交换两个位置的盒子(交换是永久的)。

求初始状态及每次交换后,完成游戏所需的最少回合数。

题解:基本场切但写的比较丑且没有赛时调出来。我们发现每次连续两个一起开盒时都是一奇一偶,而如果一次只开了一个那么之后的奇偶性都会有改变;考虑一种牌被翻开第二次的时候如果是这一轮的第一个那么后面就都会改奇偶性。我们统计答案时先考虑 \(2n\) 个盒子都有贡献,再减去某一张牌第一次出现时是在一组中的第二个的数量,还减去某一种牌的两张在同一次翻开的数量。

修改操作就把 \(l\)\(r\) 的值消掉再在 \(l\) 加上 \(a_r\) 和在 \(r\) 加上 \(a_l\) 就好,一次操作在线段树上就是 \(\log n\) 的,总共 \(O(1)\) 次操作。

需要同时在线段树上维护奇偶性和改变奇偶性后的价值,并且要维护两颗线段树,码量较大比较难写。

posted @ 2025-11-10 07:37  2020luke  阅读(11)  评论(0)    收藏  举报