【算法心得】位运算

https://codeforces.com/contest/1869/problem/A

研究了好久的样例的逻辑,看不大懂,然后发现

Note that you do not have to minimize k. 
If there are multiple solutions, you may output any of them.

说明样例的解法未必具有参考价值


一组数进行异或,以第一条样例为例:
1 2 3 0
01 10 11 00

0^0=0,所以多少个0相互异或都是0
1^1=0,偶数个1相互异或是0
1^0=1,奇数个1是1
每次计算s的值时,其实是先计算每个数位上1的个数,若有奇数个1,则该位上的结果为1,偶数个为0,这是这次推论出的一个结论,不过对于这题来说用不到


这题主要用到的性质是:

  1. x^x=0
  2. 0^x=x

所以对于任意一组个数为偶数的序列,如果它是x x x x x x这样的构造,那它最后异或出来的结果肯定是0

对于元素偶数个的序列,直接将从头到尾变成s,这样算出来的新s就肯定是0,再从头到尾变成0,就完成了

对于奇数个元素的序列
我们将前N-1个数变成s,那前N-1个数的新异或值是0,算上最后一个数,假设为a,整体N个元素的新s值为a
这时将倒数后两个数都置为a,则整个序列的s值为0^a^a=0,从头到尾变成0即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值