Loading

CF2029

A

题意

给定整数 \(l,r,k\),定义 \(S\) 表示 \([l,r]\) 内的所有整数,一次操作形如:

  • \(S\) 中选取一个数字 \(x\),满足 \(S\) 中至少有 \(k\)\(x\) 的倍数;
  • \(S\) 中删除 \(x\)

求可以进行的最大操作次数。

分析

\(S\) 中的一个整数 \(x\) 可以操作当且仅当 \(k \times x \le r\),即 \(x \le \left\lfloor \frac{r}{k} \right\rfloor\)

于是合法的区间即为 \([l,\left\lfloor \frac{r}{k} \right\rfloor]\),注意区间长度不能为负。

B

题意

给一个长度为 \(n\)\(\texttt{01}\)\(s\),一个长度为 \(n-1\)\(\texttt{01}\)\(r\)

希望对 \(s\) 执行 \(n-1\) 次操作。一次操作定义为:

  • 选择一个索引 \(k\) 满足 \(s_k \neq s_{k+1}\)。若无法选择这样的索引,则操作失败;
  • \(\overline{s_k s_{k+1}}\) 替换为 \(r_i\)

判断是否可能成功进行 \(n-1\) 次操作。

分析

注意到,一个状态存在可操作的位置 \(k\) 当且仅当序列不全为 \(\texttt{0}\) 或全为 \(\texttt{1}\),而一次 \(r_i=\texttt{0}\) 的操作等价于去除了序列中一个 \(\texttt{1}\) 位置,反之亦然。

那可以维护当前 \(s\)\(\texttt{0}\)\(\texttt{1}\) 的数量,模拟操作即可。若一次操作前 \(\texttt{0}\) 的数量为 \(0\)\(\texttt{1}\) 的数量为 \(0\) 即可判定无解。

C

题意

Kevin 在打 CF 比赛,他的 rating 初始为 \(0\)。给出他 \(n\) 场比赛每场的表现分,若当前 rating 低于本场表现分则 rating 增加一,高于则减少一,等于则不变。Kevin 可以屏蔽一段区间的比赛(区间长度至少为 \(1\)),问最优情况下 Kevin 的最终 rating。

分析

我们可以通过模拟得到只考虑前 \(i\) 场的 rating。然后考虑用一段后缀拼上一段前缀。

然后发现后缀不是很好递推处理,于是我们可以二分一个答案即最终位置的 rating,然后往前递推。由于是倒着推,遇到更小的表现分 rating 加一,遇到更大的表现分 rating 减一。相等的情况我们可以考虑一个贪心:我们希望前缀某个位置出现与当前 rating 相等直接屏蔽中间的区间,而由于 rating 更低的位置一定出现得更早,那我们一定会选择将 rating 减一。

rating 接近 \(0\) 的时候有一些细节要特判。

D

题意

给一个 \(n\) 个点 \(m\) 条边的无向图,定义一次操作为:

  • 选三个两两不同的顶点 \(a,b,c\),考虑边 \((a,b),(a,c),(b,c)\),若该边存在则删除,若该边不存在则加入;

定义好图为满足下列之一的图:

  • 没有边的图;
  • 树。

最多可以进行 \(2 \times \max\left\{n,m\right\}\) 次操作,构造方案将原图变为好图。

分析

注意到操作次数的上界很有特点,这可能提示我们操作分为两步。

考虑先把图变为较为稀疏的图。我们对每个度数不小于 \(2\) 的点 \(x\),都对这个点和它的相邻节点进行一次操作。若相邻节点之间有连边,则操作删除了一个三元环的所有边;否则操作相当于将两个相邻节点连起来并断开 \(x\) 与这两个节点的连边。

第一步后,原图转化为两类连通块:孤立点和两个点相连。如果不存在边那就做完了。

如果还有边我们就尝试将原图连成一棵树。选取当前已经连成一棵树的一个连通块为基础,将其他连通块合并到其中。若新的连通块是一个孤立点,选取其中的一个叶子和与它相连的一个点与之操作;若新的连通块是相连的两个点,选取一个叶子与之操作。不难验证操作的正确性。

由于需要动态维护边,使用 set 维护与一个节点相邻的点。

E

题意

定义对 \(x\) 的一次操作为:

  • 选择 \(x\) 的一个因数 \(d\) (\(d \ge 2\)),\(x \leftarrow x+d\)

\(x\)\(y\) 的生成器当且仅当 \(x\) 能通过若干次操作变成 \(y\)

给一个数组 \(a\) 满足 \(a_i \ge 2\),找到一个整数 \(x \ge 2\),使得每个 \(1 \le i \le n\) 中的 \(x\) 都是 \(a_i\) 的生成器,或者报告这样的整数不存在。

分析

手玩一下发现几个性质:

  • 任何质数都无法从其他数操作得来;
  • \(2\) 是任何非质数的生成器。

对于性质二有一个简单的说明:偶数只需每次 \(x \leftarrow x+2\),非质数奇数可以先减掉最小质因子 \(d\),此时原数化归为偶数情况。

于是大体思路如下:

  • 有两个或以上质数直接无解;
  • 一个质数的答案要么是这个质数,要么无解;
  • 没有质数的答案是 \(2\)

那我们只要快速判定一个数 \(x\) 是否可以被另一个质数 \(p\) 生成出来即可。

对于一个偶数 \(x\),可以被 \(p\) 生成的充要条件是 \(x \ge p \times 2\)。显然可以构造出 \(p \leftarrow p \times 2\)\(p \leftarrow p+2 \dotsb\) 的方案以说明。

对于一个奇数 \(x\),可以被 \(p\) 生成的充要条件是 \(x-d(x) \ge p \times 2\),同样可以构造出 \(p \leftarrow p \times 2\)\(p \leftarrow p+2 \dotsb\)\(p \leftarrow p+d(p) \dotsb\) 的方案。

处理质数和一个数的最小质因子可以同时用线性筛预处理。

F

题意

给一个环,环上的边黑白染色,判断环上任意两个顶点之间的(非简单)路径是否可以是回文。

分析

如果你没有手玩过样例,不要说你想了一个题。

手玩样例得到结论,一个环合法当且仅当满足下列之一:

  • 同色段的长度不少于 \(n-1\)
  • 只有一个同色段的长度等于二,其余均为 \(1\)

手玩的过程不知道咋写,就不投题解了。

posted @ 2024-11-10 16:41  tai_chi  阅读(22)  评论(0编辑  收藏  举报