求有多少对数相互异或后等于x。
已知 a[i]^a[j]=x ( i<j)
so: a[j]^x=a[i];
用一个标记数组,(桶计数)
然后每输入一个a[i].加上b[a[i]^x];
并且把b[a[i]]+1;
还有,要用ll
#include<bits/stdc++.h>
#define ll long long
const int maxn=100010;
using namespace std;
int b[maxn<<5];
int main(){
int n,x;
ll ans=0;
int a[maxn<<1];
scanf("%d %d",&n,&x);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
ans+=b[a[i]^x];
b[a[i]]++;
}
printf("%lld",ans);
return 0;
}