首页 > 试题广场 >

异或

[编程题]异或
  • 热度指数:17095 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定整数m以及n各数字A1,A2,..An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大于m的有多少个。

输入描述:
第一行包含两个整数n,m. 
第二行给出n个整数A1,A2,...,An。
数据范围
对于30%的数据,1 <= n, m <= 1000
对于100%的数据,1 <= n, m, Ai <= 10^5


输出描述:
输出仅包括一行,即所求的答案
示例1

输入

3 10  
6 5 10

输出

2
头像 ZX2021
发表于 2021-07-29 00:32:11
使用字典树TrieTree将数列A中的每一个元素都按bit位存入,查找时从最高位的bit位与m的比特位进行比较,模拟异或的操作计算出子节点应该是哪一个,计算出的子节点索引比m的对应位大则统计,比m的对应bit位小则忽略,如果相等则递归查询下一个比特位。(参考了一个Java版本的题解) #includ 展开全文