给定两个长度为 n 的数列 a,b,规定每次操作为选取一段长度为 k 的子段异或上任意自然数。
对于每次查询,先单点修改 a 或 b,你需要求出最小的操作次数,或无法使得 a 在若干次操作后变为 b。
n≤2×105
Sol#
差个分先,区间异或变为 i 与 i+k 异或。
套路的,对于 modk 分组,拉出来 k 条链,问题转化为对于每条链,相邻两个数同时异或 x,使得数列全部变为 0。
然后你不难发现,无解情况就是每条链地前缀异或最后不为 0。
显然直接从前往后就是最优策略,而操作次数就是 n 减去前缀异或值为 0 的个数。
直接上个分块,O(n√n) 做完了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧