CF1870E Another MEX Problem 题解
首先
官方做法:
- 定义对于一个区间
中不存在 满足 ,则称这个区间为“好的区间” 。好的区间只有 个。 - 证明:不妨设
,显然有 ,假设对于以 为左端点存在另一个好的区间 满足 且 ,则 ,说明 一定已经在 中出现过了,一定不会产生有效贡献,因此 不可能是一个“好的区间” - 对于
的情况同理,只需固定右端点即可 - 因此只需要预处理出“好的区间”,然后
做刚才的 dp 即可
然后再说一个别的做法:
- 发现
如果一个位置是 ,那他的后缀都是 ,因此显然你能选的位置越靠前越优 - 故设
表示可以凑出异或和为 的最小下标 - 怎么计算呢?我们可以计算
表示从 位置后面(包含)开始,满足 的最小的 ,预处理是 的 - 然后转移就比较明显了,枚举下一个区间的
值是什么, 。转移顺序可以枚举当前考虑的是前 个数,然后找到所有 的位置 进行转移
For(i, 1, n)
For(j, 0, m - 1)
if(f[ j ] + 1 == i)
For(k, 0, m - 1)
Min(f[ j ^ k ], g[ i ][ k ]);
- 最终复杂度
,不过坏消息是空间多了个常数,要开 short 才能通过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?