2024牛客寒假算法基础集训营2
C. Tokitsukaze and Min-Max XOR
题解:01 Trie
- 观察后发现对序列
排序并不影响结果 - 然后容易知道,对于
,一共有 种序列 满足条件,特别的,如果 ,只有 种满足条件 - 那么现在问题就转换为,我们固定
作为最大值,然后枚举 作为最小值,如果满足题目的限制条件,那么就统计对答案的贡献 - 但是这样枚举显然是
的,考虑优化 - 由于是异或,我们考虑 01 Trie
- 我们再将题目转化一下:对于每个
,其对答案的贡献为 - 那么我们定义
的贡献为 - 然后就是在 01 Trie 上统计答案,类似求前缀中有多少个
使得
D. Tokitsukaze and Slash Draw
题解:最短路
- 发现本题就是起点为
,终点为 的在模 意义下的最短路问题 - 对于每种操作,考虑对每个位置
向 建边,那么边数为 - 然后直接跑
即可
F. Tokitsukaze and Eliminate
题解
Solution 1:贪心
显然利用
个 vector 记录每个颜色的位置,每次挑末尾位置最小的宝石删除即可,复杂度
Solution 2: 贪心
我们考虑如果我们需要通过删除
来删除其后面的所有宝石,我们必须保证 后面没有和 颜色相同的宝石,定义 为在第 个宝石后面与第 个宝石颜色相同的宝石所在位置,即必须保证此时末尾宝石在 如果我们对每个宝石都考虑这个问题,那么题目就转化了一个经典的贪心模型:给定
条线段,求用最少的线段数覆盖区间
Solution 3:线段树优化 dp
定义
为消除 及其后面所有宝石的最小操作次数,转移显然为 线段树优化即可
H. Tokitsukaze and Power Battle
题解
Solution 1:基于"区间查询最大子段和"思想
类似最大子段和,考虑线段树直接维护答案,合并时考虑 “减号” 所在位置:
- 减号在左儿子那一段,答案为左儿子包含右端点的最大答案 - 右儿子包含左端点的最小子段和
- 减号在中间,答案为左儿子包含右端点的最大子段和 - 右儿子包含左端点的最小子段和
- 减号在右儿子那一段,答案为左儿子包含右端点的最大子段和 + 右儿子包含左端点的最大答案
线段树维护信息如下:
:区间和 :包含左端点的最小子段和 :包含右端点的最大子段和 :包含左端点的最大答案 :包含右端点的最大答案 :包含区间左右端点的整一段的答案 :区间答案 信息之间的合并:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】