牛客小白月赛45 题解
A题 悬崖 (脑筋急转弯)
脑筋急转弯题,就不翻译题目了,没必要。
当 时,可以一直跳到两个墙合并,答案为 。
当 时,至多跳一次就掉下去,但是还是有跳跃距离的,答案为 。
B题 数数 (签到)
给定一个函数:
问函数递归到第 层时, 的值为多少?(从 开始, 是全局变量,初始值为 0)
样例: 时,
不难发现,第 层会让答案增加 ,所以 。
C题 山楂 (数学,贪心)
已知现在有不少等级不同的糖果,我们可以每次选择将 3 或 4 个 级的糖果合成为一个 级的糖果,并获得 点积分。当若干个 8 级糖果被合成为一个 9 级糖果后,这个糖果会消失,不再能够被继续合成。
现在给定前八级糖果的数量 ,问我们能够合成的最高积分是多少?
糖果只能从低级向高级合成,所以我们贪心的考虑,先低级后高级。
我们假设 级糖果的数量为 ,那么 时无法合成, 时可以将三个糖果合并, 时则将四个全部合并。
时候,有一个不是很显然的性质: 一定能够被表示为 的形式(可以同余证明,或者去参考 小凯的疑惑),这意味着这一级的糖果必然能被全部合成,即给积分贡献 。那么,我们必然要最大化合成的 级糖果数量,显然数量为 。
D题 切糕 (思维,前缀和)
给定一个括号串,可以可以将其切上几刀或者不切,将其变为若干个合法括号串,问有多少种切的方式?
合法括号串:串内左右括号数量相等,且任意前缀内左括号数量不少于右括号。
,答案对 取模
若干个合法括号串的拼接必然也是一个合法括号串,所以我们直接对原括号串扫一遍,看看合不合法。
如果合法,我们重新开始,每找到能切的地方就标记一下,最后记标记的总数量为 ,那么最后答案就是 。
E题 筑巢 (树形DP)
给定一棵树,树上的点和边都拥有一个舒适值。
现在想要在树上选择一个连通块,使得连通块内部的点和边的舒适值之和最大。
我们考虑一手树形 DP,从根节点 1 开始,那么显然,这个连通块要么包含自己,要么在它的某一棵子树中。
那么,我们尝试设立状态 ,表示点 在选或者不选下的所得连通块最大值,那么有 DP 方程:
F题 交换
题面很详细且简洁,就不翻译了。
我们记排列长度 。
对于每次询问,我们考虑枚举所有可能的区间并进行操作,总复杂度为 。
我们参考这场的前缀和训练题 牛牛的猜球游戏,来对区间操作进行优化,可以将复杂度降到 。不过显然,枚举的复杂度降不了了,必须得进行优化。
(我一开始以为这个答案长度可以二分,等比赛结束了才发现这个不符合二分性质)
注意到一个性质:对于 ,排列的所有可能仅有 种,这意味着我们可以直接从排列中枚举,将复杂度降到 。但问题是, 的规模, 和 是一个数量级的,也没啥用啊?
我们换一个角度考虑,在每次询问中,我们已经知道了原排列,需要将其变为一个按照升序来的新排列,那么,我们不难构造出这个操作序列是咋样的,之后直接在所有排列中查找这个操作序列是否存在即可。
Trie树
Trie树是为了实现字符串的快速检索,同样的,它也可以实现排列的检索。
不过这个Trie树应该开多大是应该先算好的(毕竟空间有限),我们可以,手建一棵排列长度为 4 的Trie树,计算一下大小看看。
我们记一个排列长度为 的Trie树的大小为 (按照节点数的数量来算),找规律发现:。
这是一个阶乘增长的函数(查表发现 ),递推可得 ,就离谱(我们得开一个将近 规模的 int 数组,还好内存限制是 512M,再加上很多叶子节点不需要向下扩展,所以实际上很多空间是未被使用的,所以不会被记入使用范围)
康托展开+哈希
显然,我们可以将排列通过康托展开来映射为一个数,然后开一个哈希表来进行 查找。
不过比较尴尬的是,我们构造出来的操作序列往往不止一种,很有可能是若干种(例如将排列 变为 ,那么构造的操作序列应为 ,即后四位不固定)。那么,我们总不能一个个枚举来查吧?
康托展开有一个比较让人平和的性质:假设一个排列的前 位确定了,后 位不确定,那么记后 位从小到大排序,所得康托展开值为 ,那么其从大到小排序所得的展开值为 ,且所有可能排列的区间值均在 之间。
我们可以开一棵线段树当哈希表,然后每次查询看看区间有没有符合要求的值即可。
__EOF__

本文链接:https://www.cnblogs.com/cyhforlight/p/15968063.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话