[CodeForces] CF558 题解
注:难度评级为 D 到 A,对标 NOIP T1 到 T4。+ 表示比原本难,- 反之。例如,D+ 比 D 难。难度评级仅供参考。 如果认为难度评级与实际难度不符,可以在评论区@我进行讨论。
本篇题解无复杂的公式推导,题目较清新自然,请放心食用。
斜体字为说明提示。通常与多倍经验有关。
A. Lala Land and Apple Trees
【难度分析】
思维难度:D-
实现难度:D-
总体难度:D-
评级: 普及-
【题目大意】
一个人,最初在数轴
, , , 。
【解题思路】
考虑贪心。
显然,应该选择苹果树较多的那个方向走。最后得到的苹果总数是 vector
存储信息,排序后统计即可。
B. Amr and The Large Array
【难度分析】
思维难度:D-
实现难度:D-
总体难度:D-
评级: 普及/提高-
难度解析:此题的难度瓶颈在于理解题意。
【题目大意】
注意:洛谷上的题目翻译不准确。
定义一个序列的美丽值
形式化地,有
其中,
现在,给定你序列
, 。
【解题思路】
容易知道,我们需要选取出现次数最多的数,所以只需要枚举出现次数最多的数。由于我们要使答案最小,我们可以取
C. Amr and Chemistry
【难度分析】
思维难度:C+
实现难度:C-
总体难度:C
评级: 普及+/提高
难度解析:此题对标三值逻辑。
【题目大意】
有
- 将一个数乘二。
- 将一个数除以二并向下取整。
问最少通过多少次操作可以将这些数变得相同。
, 。
【解题思路】
第一个操作相当于在数的二进制的末尾补
这样,我们可以直接使用 01-Trie。末尾补
于是问题变成:一棵树上,每次可以走向
那这就是一个经典换根 DP 了。设
解释:其中,
其实这种换根 DP 技巧与这道题完全一样。
实现方法:第一次 DFS 求出
注意
D. Guess Your Way Out! II
【难度分析】
思维难度:B
实现难度:C+
总体难度:B-
评级: 省选/NOI-
【题目大意】
一颗完美二叉树,根节点编号为
你需要求出一个叶子节点(叶子节点层数为
每次信息形如
如果无法找到一个这样的节点,输出 Game cheated!
;如果有多个这样的节点,输出 Data not sufficient!
;如果有且仅有一个这样的节点,输出节点编号。
, ,保证信息合法。
【解题思路】
考虑到在树上进行区间操作是一件很困难的事,所以应该把它转化到序列上。
具体来说,给定深度为
对于“在”区间内的情况,直接全部取交集即可。对于“不在”的情况,先按左端点排序,这样会方便考虑,然后逐一合并相交的区间,再取补集,最后与“在”的区间合并即可。
注意判断无法找到的情况、有多个的情况还有没有“不在”区间的情况。
E. A Simple Task
【难度分析】
思维难度:D+
实现难度:B
总体难度:C+
评级: 提高+/省选-
【题目大意】
给定一个长度为
- 将
升序排序。 - 将
降序排序。
求最终的字符串。
, 。
【解题思路】
定义函数
由于只有
具体的,第
考虑排序操作,这里只讨论升序排序,因为降序排序同理即可。
我们观察一个例子:对于 acababc
进行排序,结果是 aaabbcc
。这里,第 a
,第 b
,第 c
。注意到这里的
每次修改时,从小往大枚举字符,这样就可以保证升序。对于字符
这里,我们利用了两个性质:排序后相同的字符是连续的;排序操作不影响区间内字符的个数。
输出的时候,我们遍历时遍历到叶子节点输出即可。
时间复杂度
其实此题与这个题有着较为相似的思路,只不过后者将值域从
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!