模拟赛题解
T1 辣椒树
题面描述
给定一颗树,求分成三部分后的最小差异值。
- 子任务一,分,保证 ;
- 子任务二,分,保证 ;
- 子任务三,分,。
题解
暴力:每次枚举两个点,将其父边断掉,如果存在祖先关系则特判一下,复杂度 ,预计
正解: 搜索每个结点,砍掉它的父边,剩下的尽量等分(易证)。
这一步可以用 维护。
对于一个点,将其到根节点的链上的点放入 ,再将这条链左边的所有点放入
然后令 。 在 中查找最靠近 的两个数,在 中查找最靠近 的两个数,四种情况讨论一下。
细节: 到一个点时将其放入 ,回溯的时候将其从 中删除,并插入到 中。
预计 。
T2 括号序列
题面描述
给你一个由小写字母组成的字符串 ,要你构造一个字典序最小的合法的括号序列与这个字符串匹配。
字符串和括号序列匹配定义为:首先长度必须相等,其次对于一对匹配的左括号和右括号 ,必须有 。
无解输出 -1
。
对于 10% 的数据,保证 。
对于 50% 的数据,保证 。
对于 100% 的数据,保证 。
题解
暴力1:直接 枚举每个位置状态,复杂度 ,预计 。
暴力2:考虑贪心,如果一个左括号有多个合法的右括号匹配,则一定选最靠右的,而一对括号匹配当且仅当字符相同且中间部分可以完全匹配。
怎么判断能否一段连续区间可以完全匹配呢?我们可以用栈模拟!
假设该区间为 。如果栈在 时的形态与 时的形态相同,则可以匹配。
而栈的形态我们可以用字符串哈希记录。
所以我们只需要 预处理出每个位置的哈希值,然后对于每一个点,从右往左找第一个哈希值相等的位置,递归处理即可。复杂度 ,预计 。
正解:现在的瓶颈是如何 找到最靠右的匹配位置。
我们可以每个点的哈希值离散化并存入 中进行分类。
然后对于当前状态 ,我们二分坐标在 范围中与 匹配且最靠右的位置,即在 中进行 upper_bound
。
最后复杂度均摊下来就是 ,预计 。
T3 路由表
题面
题解
暴力1:按照题意模拟即可,复杂度 ,预计 。
暴力2:将 地址用 unsigned int
存下来,比较 , 是否匹配就只需要判断 即可,复杂度 ,预计 。
正解:考虑将当前插入的所有 地址建成一颗 ,结尾打上标记。
对于每次询问,将路径上的所有标记存入一个维护单调递增序列的栈,二分 和 的位置并计算一下差值就行了。(信息量有些大......)
复杂度线性,预计 。
T4 旅游路线
题面
题解
此处只讲正解。
因为钱花得越多,走的路程也就越多,所以可以二分钱数,然后判断最远路程是否符合预期。
定义 表示从 出发,初始油空,用了不超过 的钱,最多能跑多远。
其中 表示从 走到 ,初始油满(假设为 ),最多能跑多远。
计算 采用倍增。
预处理 表示用了 的油,从 到 最多能跑多远。
辅助地,定义 表示依次考虑了 , , ,......, 的油耗,从 到 最多能跑多远。
若 二进制下第 位是 ,那么 。
若 二进制下第 为是 ,那么 。
最后 。
采取记忆化搜索。
复杂度 ,预计 。
本文作者:HQJ2007
本文链接:https://www.cnblogs.com/HQJ2007/p/17561261.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具