CF1516B AGAGA XOOORRR

给定一个 nn 长度的数组 aa ,可以进行操作:

将数组相邻的两个元素删除,并在原来的位置插入这两个元素的异或和。

求在最多删除 n-2n2 个元素(即至少剩余 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.

 

-----

再傻逼也不退役。

posted @   liyishui  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示