Wannafly挑战赛1 B Xorto

Xorto
时间限制:2秒 空间限制:32768K
https://www.nowcoder.com/acm/contest/15/B

题目描述

给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为0。

输入描述:

第一行一个数n表示数组长度;
第二行n个整数表示数组;
1<=n<=1000,0<=数组元素<100000。

输出描述:

一行一个整数表示答案。
示例1

输入

3
0 0 0

输出

5

说明

([1,1],[2,2]),([1,1],[3,3]),([1,1],[2,3]),([1,2],[3,3]),([2,2],[3,3])
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=10004;
 5 
 6 int a[N],b[N*200];
 7 
 8 int main(){
 9     int n;
10     cin>>n;
11     for(int i=1;i<=n;i++){
12         int x;
13         scanf("%d",&x);
14         a[i]=a[i-1]^x;
15     }
16     ll sum=0;
17     for(int i=1;i<=n;i++){
18         for(int j=i;j<=n;j++){
19             sum+=b[a[j]^a[i-1]];
20         }
21         for(int j=i;j>=1;j--)
22             b[a[i]^a[j-1]]++;
23     }
24     cout<<sum<<endl;
25 }

 

posted on 2017-10-14 13:23  hhhhx  阅读(359)  评论(0编辑  收藏  举报

导航