正整数异或值问题

来源:互联网 发布:手机事件提醒软件 编辑:程序博客网 时间:2024/06/06 02:00

【Description】

给你n个正整数,请你计算出有多少对数的异或值小于等于k。

【Input】

输入包含多组测试数据,每组测试数据包含两行,第一行为两个正整数n(2<=n<=100000),k(k<2^30);

第二行包含n个正整数,每个数都小于2^30,每两个数以空格隔开。

【Output】

对于每组测试数据输出相应的答案。

【Sample Input】

5 6

4 3 5 7 9

5 3

7 9 8 4 3

【Sample Output】

5

2

【分析】没有高效算法,直接两两比较计数即可。注意异或运算“^”优先级低于“<=”,应加括号。

<span style="font-family:Courier New;font-size:12px;">#include <iostream>using namespace std;const int maxn = 100000 + 2;int A[maxn];int main () {int n, k;while (cin >> n >> k) {int cnt = 0;for (int i = 0; i < n; i++)cin >> A[i];for ( i = 0; i < n; i++)for (int j = i+1; j < n; j++)if ((A[i] ^ A[j]) <= k) cnt++;cout << cnt << endl;}return 0;}</span>


0 0