(一)
由異或的性質知,如果 \(a \oplus b=c\),那麼 \(a \oplus c=b\)。
對於每一個數 \(a\),搜它前面有幾個 \(b=a \oplus x\)。
坑點:要開 long long
,陣列有開大一點。
(二)
AC 程式碼。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,sum[100001],ans;
signed main(){
scanf("%lld%lld",&n,&x);
for(int i=1;i<=n;i++){
int a;
scanf("%lld",&a);
ans+=sum[a^x];
sum[a]++;
}
printf("%lld",ans);
return 0;
}