首页 > 其他 > 详细

NC14247 Xorto(异或+前缀和)

时间:2020-04-11 16:01:15      阅读:52      评论:0      收藏:0      [点我收藏+]

对于异或的题目,很多都跟前缀和放在一起,比如说这题,让你求不相交区间异或值相等的个数

很容易想到用前缀和表示区间,现在考虑如何做到不相交并且不重复计算

1.二维循环,第一维从1开始,第二维一个用来统计,一个用来更新

统计的时候,从i开始到n,把这段里面的所有区间的异或值,都看看前面有没有相等的,之后计算

更新的时候从1-i,把前面的所有的区间值都加进去

这样就做到不重不漏

技术分享图片
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=5e5+10;
int s[N];
int a[N];
int cnt[N];
int main(){
    int n;
    cin>>n;
    int i;
    for(i=1;i<=n;i++){
        cin>>a[i];
        s[i]=s[i-1]^a[i];
    }
    ll res=0;
    for(i=1;i<=n;i++){
        int j;
        for(j=i;j<=n;j++){
            res+=cnt[s[j]^s[i-1]];
        }
        for(j=1;j<=i;j++){
            cnt[s[i]^s[j-1]]++;
        }
    }
    cout<<res<<endl;
}
View Code

 

NC14247 Xorto(异或+前缀和)

原文:https://www.cnblogs.com/ctyakwf/p/12679532.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!