[ABC098D] Xor Sum 2 题解
题解
题目大意
给出一个序列
解析
众所周知,异或是位运算中的一种不进位加法,即为如果两个
为什么说是不进位加法呢?比如
因为
比如
题目要求求
所以这些数据肯定是有单调性的,然后用今天学的双指针扫一遍,用了实时处理前缀
代码
Like QYC, it had some bug and I digged many pits. So if you Ctrl+ACV in one go, you'll see quite lots of frogs are shouting. 坑删了
请自己理解思路之后打代码。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[1919810];
ll l=1,sxor,sum,ans;
int main() {
ios::sync_with_stdio(0); //加速读入
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int r=1;r<=n;r++){
sum+=a[r],sxor^=a[r]; //处理当前前缀sum和xor
while(sxor!=sum&&(l<r)) //向左边扩展范围
sum-=a[l],sxor^=a[l++]; //算xor和sum
ans+=r-l+1;
}
cout<<ans;
}
本文作者:Ariasaka
本文链接:https://www.cnblogs.com/LYXOfficial/p/17648719.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步