AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P4005. 统计差异值大于相似值二元组个数

中等通过率 60% · 提交 113 · 通过 68
位运算哈希表数学枚举

小慕正在处理一批正整数,对于任意两个正整数X和Y,他定义了它们之间的: 差异值:将X、Y转换成二进制后,对于二进制的每一位,如果对应位置上的bit值不相同,则该位为1,否则为0; 相似值:将X、Y转换成二进制后,对于二进制的每一位,如果对应位置上的bit值都为1,则该位为1,否则为0。 现在小慕手上有n个正整数,B[0]到B[n-1],他想知道有多少对(i, j) (0≤i<j<n),使得Bi和Bj的。 假设X=5,Y=3;则X的二进制表示为101;Y的二进制表示为011; 那么X与Y的差异值二进制为110;相似值二进制为001; X与Y的差异值十进制等于6,相似值十进制等于1,满足条件。

提示:带虚线的词点一下有通俗解释。

输入描述

一个n 接下来n个正整数 数据范围:1 <= n <= 10^5,1 <= A[i] < 2^30

输出描述

满足差异值大于相似值的对数

示例

示例 1

输入

5
3 5 2 8 4

输出

8

说明:满足条件的分别是(0,1), (0,3), (0,4), (1,2), (1,3), (2,3), (2,4), (3,4)

示例 2

输入

4
4 3 5 2

输出

4

说明:满足条件的分别是(0,1) (0,3) (1,2) (2,3),共4对。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
差异值与相似值计算示例(A=5, B=3) A = 5 1 0 1 B = 3 0 1 1 差异值(异或) 1 1 0 相似值(与) 0 0 1 差异值 = 110₂ = 6 相似值 = 001₂ = 1 6 > 1 → 满足条件
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「统计差异值大于相似值二元组个数」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。