正整数异或值问题

题目详情:

给你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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值