zoukankan      html  css  js  c++  java
  • NC14247 Xorto(异或+前缀和)

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

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

    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
  • 相关阅读:
    JZ-C-36
    JZ-C-35
    JZ-C-34
    JZ-C-33
    JZ-C-32
    JZ-C-31
    JZ-C-30
    JZ-C-29
    JZ-C-28
    JZ-C-27
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12679532.html
Copyright © 2011-2022 走看看