CF 教育场 135 题解
A题 Colored Balls: Revisited(签到)
给定 种颜色的球,其中颜色 的球的数量是 ,保证 是奇数。
在一次操作中,我们可以选择两种不同颜色的球,然后各拿走一个。我们不断进行该操作,直到全场只剩下一个球,问这个球的颜色可能是什么?(如果有多种可能,输出其中一种即可)
我写的时候是认为,数量最多的更容易剩下来,直接输出数量最多的那种颜色即可,现在小小证明一下(其实也很简单):按照从小到大排个序,然后依次消掉当前剩下来数量最小的数量即可。
B题 Best Permutation(构造)
给定一个排列 ,现在执行如下函数:
给定 ,要求我们构造一个排列,使得返回的值尽可能大,并输出该排列。
假定最后一个数是 ,那么得到的返回值不会超过 :如果前面 个值得到的数是 ,那么
- ,得
- ,最后的值直接变成 0
那么显然,最后一个数应该填 ,倒数第二个填 ,随后让前 个数得到的值变成 0 即可:
- 随机法:倒数第三个填 1,然后前面 个数全部随机(得到正数的概率要远大于得到 0 吧,然后直接被 1 压成 0 了)
- 构造法:如果 是偶数,那么直接类似 即可;是奇数,就直接
C题 Digital Logarithm(数据结构,贪心)
我们可以对一个数 进行操作 ,而 函数返回 的十进制位数。
给定两个长度为 的数列 ,我们可以选定某个数列的某个数,并执行操作 ,问至少需要执行多少次操作,才能使得两个数列“相同”?(数列排序后完全相同,就可以视为“相同”)
有相同的数就先过滤掉,保证剩下来的数没有交集(这部分直接用 map 啥的统计一下,整体 的)。
注意到 ,这意味着所有数操作一次后都变成了个位数,所以我们先对两个数列里面大于等于 10 的都操作一下,随后再过滤一遍,之后对所有大于 1 的且剩下来的个位数操作一次即可。
整体复杂度:第一次过滤交集的复杂度是 (我用的 map,如果手写哈希或者 unordered_map 可以变成 ),后面操作的流程就是 了。
D题 Letter Picking(SG博弈)
给定一个长度为 的字符串 (保证 是偶数)。
现在 Alice 和 Bob 进行游戏,Alice 先手,初始状态下每个人都有一个空的字符串。在每一个回合,玩家可以从字符串 的开头或者结尾拿走一个字符,放在自己的字符串的头部。游戏整体结束后( 变空),字典序更小的那个人赢(在相同的情况下是平局)。
一个不是很典型的 SG 博弈题(一个是因为有平局,还有一个是因为两轮操作才被认为是一个阶段),我们记 0 为 Bob 赢,1 为平局,2 为 Alice 赢(只记录 Alice 先手的状况,因为 Bob 纯被动应付的)。
假设此时区间是 ,那么接下来有四种走向:
- 我拿头部,对方拿头部,变成子问题 ,得到 SG 值为
- 我拿头部,对方拿尾部,变成子问题 ,得到 SG 值为
- 我拿尾部,对方拿头部,变成子问题 ,得到 SG 值为
- 我拿尾部,对方拿尾部,变成子问题 ,得到 SG 值为
假设我们拿了 ,对方拿了 ,后续的新区间是 ,那么有:
- 当 时,当前状态的 SG 和 的SG完全相同
- 当 时,当前状态的 SG 视情况而定:
- 如果 ,那么该状态就是 0
- 如果 ,那么该状态就是 2
- 当 时,当前状态的 SG 视情况而定:
- 如果 ,那么该状态就是 2
- 如果 ,那么该状态就是 0
边界条件:当 时,。
最终 SG,我们需要小处理一下:对方的行动往坏处想,我方的行动往好处用,所以是 。
直接记忆化奔着搜一遍就行,复杂度 。
(似乎也有人是直接贪心过的)
__EOF__

本文链接:https://www.cnblogs.com/cyhforlight/p/16725555.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)