Xor of 3

给定一个n位01序列,你可以选择三个相邻数字,把他们都变成这三个数的异或和
要求在n次操作内将序列变全0,有解输出方案,无解输出-1。
n<=2e5

题解

性质1:全体异或和的奇偶性不变,可以以此判断有解

构造策略

1.相邻走一遍:结果就是每个位置变成原来的后三个的异或和,似乎不会简化问题
2.隔一位走:两位两位相同,似乎简化了问题,而且可以发现
如果n是奇数, a n = a n − 1 = a n − 2 = 0 a_n=a_{n-1}=a_{n-2}=0 an=an1=an2=0,否则无解
奇数如图
□□ □□ □□ □□□
这时候直接反方向再做一次,直接结束
□□□ □□ □□ □□

如果n是偶数
□□ □□ □□□ □
如果最后两位恰好都是0就结束了。
但如果都是1,奇数的方法就不能套用了
□□ □□ 1111
其他情况就无解了

子问题

一个简单的想法是,我们需要找到一个又一个异或和为0的奇数列。
但是仔细一想,真的是一个又一个吗,如果存在,那么必然有一个最左边的,那么右边剩下的也一定是。(因为当前未解决的情况是:异或和为0,n为偶数,所以一定是被分割成两个奇数的偶数长度数列)

总结

构造数列操作题可以考虑的套路:
1.规律性操作
2.分而治之+问题转化

错因

忽视了偶数被分成 1 + (n-1)的情况,虽然1不用操作,但是对后者是有意义的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarden_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值