专栏文章
题解:P14359 [CSP-J 2025] 异或和 / xor(民间数据)
P14359题解参与者 31已保存评论 31
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 30 条
- 当前快照
- 1 份
- 快照标识符
- @minfp7zx
- 此快照首次捕获于
- 2025/12/02 01:39 3 个月前
- 此快照最后确认于
- 2025/12/02 01:39 3 个月前
大意是选择尽可能多的不相交区间,使得每个区间的异或和都等于 。
设前缀异或数组:
其中 。
区间 的异或和可表示为:
要使区间 的异或和等于 ,需满足:
原问题转化为:在 中寻找尽可能多的下标对 ,满足:
- 对应区间 互不重叠
可以用贪心来做,哈希表记录各前缀异或值最近出现位置,然后按照条件选取区间即可。
CPP#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int a[N],s[N];
unordered_map<int,int> lst;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
lst[0]=0;
int last=0,ans=0;
for(int i=1;i<=n;i++)
{
s[i]=s[i-1]^a[i];
int tar=s[i]^k;
if(lst.count(tar)&&lst[tar]>=last)
{
ans++;
last=i;
}
lst[s[i]]=i;
}
cout<<ans;
return 0;
}
相关推荐
评论
共 31 条评论,欢迎与作者交流。
正在加载评论...