Xorto

Xorto

https://ac.nowcoder.com/acm/problem/14247

题意:求一个数组中的有多少组两个互不相交的区间异或和为零。
思路:直接暴力,从左到右枚举数组,将以当前元素的前一个元素为右端点,枚举该类区间的异或和,用一个数组仿map容器记录个数,再以当前元素左端点,枚举该类区间的异或和,将map容器中值相同的数的个数加起来就是结果了

代码:

#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define inf 998244353

int a[1005], ma[500005];

int main()
{
    int n;
    ll z=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<n;i++)
    {
        int k=0;
        for(int j=i-1;j>=0;j--)
        {
            k=k^a[j];
            ma[k]++;
        }
        k=0;
        for(int j=i;j<n;j++)
        {
            k=k^a[j];
            z=z+ma[k];
        }
    }
    printf("%lld\n",z);
    return 0;
}
全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务