CF 1040 Div.2 解题报告

A(800)

题意:给定给一个大小为 \(n\) 的可重数集 \(A\),你每一次可以选择 \(a\) 中一个子集,进行下列一个操作后从 \(A\) 中删除这个子集:

  • 使收益加上这个子集内所有元素的和;

  • 使收益加上这个子集内所有元素的 mex。

请最大化收益。

注意到只有 \(1\)\(0\) 有机会用到第二个操作,然后优先处理 \(1\) 的情况就好。

B(1100)

题意:有一个长度为 \(n\) 的数组 \(a\),保证其只由 \(0,1,2\) 构成,且每个数至少出现一次。

你需要重排这个数组,使其满足以下性质:

\(1\) 出发开始在数组上移动,每一次移动到 \(i\) 时获得 \(a_i\) 的价值(包括在开始时也要加上 \(a_1\) 的价值),每一次移动可以从 \(i\) 移动到 \(i-1\)\(i+1\),只能在 \(n\) 结束。该数组需要满足无论在上述过程中怎么操作,都无法使权值为 \(m\)

请构造方案,或报告无解。

首先,我们可以简化上述过程:先从 \(1\) 走到 \(n\),然后在途中的某些位置进行若干次往返(从 \(i\)\(i-1\),再回到 \(i\))。

然后你就发现价值至少为数组中所有元素的和。

如果这个值大于 \(m\),那就不需要重排了;如果等于 \(m\),那也不需要重排了(已经输了QAQ)。

如果小于 \(m\),那就需要操作了:首先,每一次往返只会增加数组中两个相邻元素的权值和。因为 \(0,1,2\) 都至少出现一次,所以 \(1,2,3\) 中至少出现两个。我们肯定不能让 \(1\) 出现,否则一定不合法。因此 \(2,3\) 一定出现,发现 \(f(x,y)=2x+3y(x,y \in N)\) 的值域为 \([2,+ \infty]\)。所以当且仅当 \(m=1\) 时,存在方案。

C(1300)

题意:有 \(n\) 个二元组,对于其中若干个二元组的子集,我们定义:

  • 将二元组视为区间,\(f(S)\)\(S\) 中所有区间的并集长度减一。

  • 将二元组视为无向边,\(g(S)\)\(S\) 中边构成的图上,最长的环的长度。

请构造一个子集 \(S\),使得 \(f(S)-g(S)\) 最大。

一个有趣的发现是:如果我们最大化 \(f(S)\) 的同时,使选择二元组数量最小,那么 \(g(S)\) 一定为 \(0\)。(证明留给读者完成)

D(1600)

题意:有长度为 \(n\) 的排列,你可以进行若干操作,每次操作可以选择任意一个 \(i\) ,把 \(p_i\) 改为 \(2*n-p_i\)。最小化逆序对个数。

我们发现:对一个 \(i\) 进行操作后,原来小于 \(p_i\) 的数不会受到影响(该贡献的还是会贡献,不贡献的还是不贡献);只有原来大于 \(p_i\) 的数会受到影响,贡献情况会反转(即原来不贡献的,现在会贡献了;反之亦然)。而且无论原来大于 \(p_i\) 的数是否被操作,它都会受到这个影响(无论是否被操作,在 \(i\) 被操作后都一定小于 \(p_i\))。

贪心即可。

E(2300)

题意:有个长度为 \(n\)\(n \le 1000\))的待求的括号序列,保证左右括号都至少出现一次。你需要进行不超过 \(100\) 次询问来还原这个序列。每一次询问你可以选择至多 \(1000\) 个可以重复的下标,返回这些下标构成的括号序列中有多少合法的子串。

有部分分(分别为询问不超过 \(550\) 次和不超过 \(200\) 次)。

首先,我们应该想到怎么找到一个 ( 和一个 )。(这样我们的询问就轻松很多了,因为我们可以构造一个确定的括号序列来判断未知的位置上的值)实现上,可以通过二分来找到第一个形如 () 的位置。

然后考虑怎么构造序列来使得我们可以检测一个位置是否为 (。显然地,(a 就符合我们的要求。

那么能不能同时检测两个呢?我们考虑:如果可以同时检测两个位置,那么就需要对于四种不同情况返回四种不同的值。不难分析(a(b() 就满足我们的需求。

那能不能再多一点呢,毕竟询问长度那么大耶。我们考虑二进制构造。具体地,你在一个 (a 的右侧放 \(2^k\)(),再加上一个 ( 和其他组分开。询问获得的返回值减去 \(a\) 全为左括号时的返回值,你就可以构造一个单次 \(8\) 位置的询问串。

但是这样对于 \(100\) 次的限制还是太少了点。观察上述构造浪费了很多位置去填充 (),而这些位置的贡献我们却不关心。如果我们可以充分利用这些位置,那么单次可以多问一点。我们构造一个长度为 \(m\) 的排列 \(p\),满足 \(\forall_{i \in [2,m]}\frac{p_i*(p_i+1)}{2} > \frac{p_{i-1}*(p_{i-1]+1})}{2}\)\(\sum \limits_{i=1}^{m} p_i \le 10^3\)。同时最大化 \(m\)。然后对于第 \(i\) 个询问的位置,我们重复 \(p_i\)(a ,然后加上一个 ( 和其他组分开,你就得到一个单次询问 \(13\) 位置的询问串。

D(2600)

神秘四维区间 dp。

posted @ 2025-09-03 21:32  XiaoZi_qwq  阅读(7)  评论(0)    收藏  举报