【题解】牛客练习赛41-D 最小相似度
首先考虑我们到底要求啥,实际就是要快速求出对于一个数 所有数与它异或后的 SIM
值。
一种 naive 的想法是直接枚举 显然复杂度爆炸,因为 太大了,是 的。
考虑把 干掉,倒着想。题目的描述引导我们去二分答案。
设当前答案是 目标就是看是否存在一个 满足最大 SIM 不超过
考虑设 表示 在二进制下 的个数,寻找一个逆向的突破口:
不能直接枚举 考虑什么情况下我们可以知道存在这样一个
那么发现,每个数 在经过变换后的值就是 那不妨从这个最终状态出发。
考虑预处理出所有二进制下 的个数等于 的数,那么设 表示 这个数是否有贡献,那么把 的贡献都算上,现在我们就有了两个多项式:
那么设
那么存在一个 ,就意味着 因为这就等价于它对每个数都有贡献。
从上述做法就可以二分答案了。复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?