CF1516B AGAGA XOOORRR
给定一个 nn 长度的数组 aa ,可以进行操作:
将数组相邻的两个元素删除,并在原来的位置插入这两个元素的异或和。
求在最多删除 n-2n−2 个元素(即至少剩余 22 个元素)的情况下能否使数组所有元素相等。
solution:
前置知识:
异或具有结合性,a xor b xor c xor d xor e = (a xor b xor c) xor ( d xor e)
s xor s = 0, 0 xor s= s;
考虑最后剩下了若干个相等的数,记作x;
若这若干个相等的数的个数为偶数,则其异或和为0,又根据结合律,推出原数列的异或和也为0
所以对于可能为偶数个的情况,先check一下原数列异或和,若为0必有解
证明:
s= a xor b xor c xor d xor e=0;
则可以写成(a xor b xor c) xor (d xor e)=0的形式
逆推得 a xor b xor c ==d xor e,则必有两个数相等
再考虑为奇数个的形式
那么 x xor x xor x xor x..(奇数个x的xor)==x
则可推出原数列的xor和也为x,
先算出原数列异或和后,对每个元素逐个异或过去,计算得到x的次数(得到一次就清零,重新开始计数)
大于2则有解
为什么这样做是对的?yy一下,异或的顺序不改变最终的值,或者说目标是若干个x,那么这些数肯定要能异或出x.
-----
再傻逼也不退役。
分类:
思维题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)