NC14247. Xorto
描述
输入描述
第一行一个数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])C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 1120K, 提交时间: 2020-05-22 01:14:19
#include <bits/stdc++.h> using namespace std; int a[10005],mp[3000005]; int main(){ int n,x; cin>>n; for(int i=1;i<=n;i++){ cin>>x; a[i]=a[i-1]^x; } long long sum = 0; for(int i=1;i<=n;i++){ for(int j=i;j>=1;j--){ mp[a[i]^a[j-1]]++; } for(int j=i;j<n;j++){ sum+=mp[a[i]^a[j+1]]; } } cout<<sum<<endl; }
C++(clang++ 11.0.1) 解法, 执行用时: 7ms, 内存消耗: 1564K, 提交时间: 2023-05-31 22:59:16
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,i,j,a[10010],f[500010],ans; int main(){ scanf("%lld",&n); for(i=1;i<=n;i++){ scanf("%lld",&a[i]); a[i]^=a[i-1]; } for(i=1;i<=n;i++){ for(j=i;j<=n;j++)ans+=f[a[j]^a[i-1]]; for(j=0;j<i;j++)f[a[i]^a[j]]++; } printf("%lld",ans); }