CSDN 正整数异或值问题

题目详情:

http://student.csdn.net/mcs/programming_challenges?page=4

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

题目分析:

由于题目数据只到100000,可以直接进行暴力求解,只是要注意,该值不能异或自己,而且要去掉重复的个数,例如a^b与b^a是一种。

AC代码:

#include<iostream>
using namespace std;
typedef long long LL;
LL a[100001];
int main()
{
    LL k; int n;
    while(cin>>n>>k){
        int sum=0;
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if((i!=j)&&(a[i]^a[j])<=k){
                    //cout<<a[i]<<" "<<a[j]<<" "<<(a[i]^a[j])<<endl;
                    sum++;
                }
            }
        }
        cout<<sum/2<<endl;
    }
    return 0;
}
时间: 2024-10-10 13:50:59

CSDN 正整数异或值问题的相关文章

HJA的异或值

HJA的异或值 查看 提交 统计 提问 总时间限制:  20000ms 内存限制:  512000kB 描述 形态形成场(Morphogenetic Field)假说是Rupert Sheldrake提出的一种“共鸣”理论,是事件的共鸣.连续发生同类事件的场所被称为“形态形成场”,所发生的同类事件则被称为“形态共鸣”. 有一个验证这一假说的著名实验:将860只白鼠等分成两批,在相距10.8英里的两个实验室进行三个阶段的实验. 第一阶段在实验室A用300只进行一项简易的迷宫实验,让一只白鼠进入简易

CSU 1214 找最大异或值

题目大意: 给定一堆数,从中找2个数异或得到的最大值 直接暴力会超时,我们要考虑对于每一个数去匹配找到异或的最大值,我们希望2进制越前面的数尽可能都为1 所以我们用 0-1 字典树保存这些数,因为一个int型的正整数最多2进制到第30位,所以我们用31层高的字典树保存,第一层为root节点 每次查询操作都是对于当前数的2进制位查找,如果与之相反的方向有点,就往与之相反的方向向下找,这样异或才为1,没有,就顺着当前相同方向向下找,那样异或值为0 1 #include <cstdio> 2 #in

[01字典树]求序列完美度(求区间最大异或值)

https://nanti.jisuanke.com/t/15531 解题关键:01字典树模板,用字典树保存每个数的二进制表示,从而动态维护区间上的最大异或值,注意添加和删除都可以用于一个change函数表示. 复杂度:$O(n\log n + {n^2}\log n)$ 1 #include<bits/stdc++.h> 2 #define maxn 1005 3 #define inf 0x3f3f3f3f 4 using namespace std; 5 typedef long lon

Educational Codeforces Round 12 E. Beautiful Subarrays trie求两异或值大于等于k对数

E. Beautiful Subarrays One day, ZS the Coder wrote down an array of integers a with elements a1,  a2,  ...,  an. A subarray of the array a is a sequence al,  al  +  1,  ...,  ar for some integers (l,  r) such that 1  ≤  l  ≤  r  ≤  n. ZS the Coder th

求1到n这n个整数间的异或值 (O(1)算法)

问题:求1到n这n个整数间的异或值,即 1 xor 2 xor 3 ... xor n 记 f(x, y) 为x到y的所有整数的异或值. 对 f(2^k, 2^(k+1) -1) (注意文章中的 ^ 表示的是“幂”,xor 表示“异或”,or 表示“或”): 2^k 到 2^(k+1) -1 这2^k个数,最高位(+k位)的1个数为2^k, 若 k >= 1,则2^k为偶数,将这2^k个数的最高位(+k位)去掉,异或值不变. 因而 f(2^k, 2^(k+1) -1) = f(2^k - 2^k

利用01字典树查询最大异或值

01字典树的是只含有0和1两种字符的字典树,在使用它的时候,把若干数字转成二进制后插入其中 在查询树中的哪个数字和给定数字有最大异或值的时候,从根开始贪心查询就ok了 HDU4825是一道裸题:给出n个数和m次询问,每次询问给出一个数x,问在n个数中哪个数与x异或值最大 1 #include<cstdio> 2 #include<cstring> 3 const int maxn=1000005; 4 int n,m,rt; 5 int a[maxn],v[3500005],s[3

紫色的手链(求最大值和次大值的异或值最大)

描述 那是木姑娘十七岁时,我送给她的生日礼物.(后来手链也成为了我最喜欢的出题媒介) 记得最初买的手链,由n段紫色的珠子构成,每一颗珠子都被赋予了一种价值评价w[i]. 为了木姑娘,我只惋惜自己不能摘下漫天繁星送给她. 不过我并没有将整个手链都送出去,木姑娘的手腕是纤细的.我只需要截取一个子段就可以了,长度无论多少都可以. 不过我希望,这个子段的最大值异或次大值可以最大,这样或许木姑娘会更喜欢吧.(这里次大是说严格次大) 格式 输入格式 第一行一个数n 第二行n个数,依次表示这个序列w[1],w

leetcode-421-数组中两个数的最大异或值*(前缀树)

题目描述: 方法一: class Solution: def findMaximumXOR(self, nums: List[int]) -> int: root = TreeNode(-1) for num in nums: cur_node = root #当前的node for i in range(0, 32): #代表32个位 # print num, 1 <<(31 - i), num & (1 <<(31 - i)) if num & (1 &l

hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0

http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x1---xn表示最终第i堆石子到底取不取(1取,0不取),将每堆石子数画成2进制的形式,列成31个方程来求自由变元数,最后由于自由变元能取1.0两种状态,所以自由变元数多于0即可输出Yes. 注意有40+个方程,因为A[I]<=1e12.... #include <cstdio> #incl