题目详情:
给你n个正整数,请你计算出有多少对数的异或值小于等于k。
输入描述:
输入包含多组测试数据,每组测试数据包含两行,第一行为两个正整数n(2<=n<=100000),k(k<2^30);第二行包含n个正整数,每个数都小于2^30,每两个数以空格隔开。
输出描述:
对于每组测试数据输出相应的答案。
答题说明:
输入样例:
5 6
4 3 5 7 9
5 3
7 9 8 4 3
输出样例:
5
2
这个题……简单的超出了我的理解范围,以至于我一直以为它会有什么技巧才行,一直没想到,今天没事干用两重循环试了一下,过了……真的是我想太多了……算个教训,在此记下:做题时不要忘记简单的解法。
#include<stdio.h>
int main(void){
int n, k, i, j;
while(scanf("%d%d", &n, &k) == 2){
int v[100100];
int ans = 0;
for(i = 0; i < n; i++){
scanf("%d", &v[i]);
}
for(i = 0; i < n; i++){
for(j = i + 1; j < n; j++){
if((v[i] ^ v[j]) <= k){
ans++;
}
}
}
printf("%d\n", ans);
}
return 0;
}