对于任意两个正整数A和B,定义它们之间的差异值和相似值:
差异值:A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为1,否则为0;
相似值:A、B转换成二进制后,对于二进制的每一位,对应位置的bit值都为1则为1,否则为0;
现在有n个正整数A0到A(n-1),问有多少(i, j)0<=i<j<n),Ai和Aj的差异值大于相似值。
假设A=5,B=3;则A的二进制表示101;B的二进制表示011;
则A与B的差异值二进制为110;
相似值二进制为001;
A与B的差异值十进制等于6,相似值十进制等于1,满足条件。
输入描述
输入
一个n接下来n个正整数
数据范围:1<=n<=10^5,1<=A[i]<2^30
输出描述
输出
满足差异值大于相似值的对数
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4
4 3 5 2
输出
4
说明
样例1解释
满足条件的分别是(0,1)(0,3)(1,2)(2,3),共4对。
Java 代码
import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
// 处理输入
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
//转为数组
List<Integer> nums =Arrays.stream(in.nextLine().split(" "))
.map(Integer::parseInt)
.collect(Collectors.toList());
int[] bit_info = new int[100];
for (int num : nums) {
String num_binary = Integer.toBinaryString(num);
int len = num_binary.length();
if ("0".equals(num_binary)) {
bit_info[0]++;
} else {
bit_info[num_binary.length()]++;
}
}
int res = 0;
for (int i = 0; i < bit_info.length; i++) {
for (int j = i + 1; j < bit_info.length; j++) {
res += bit_info[i] * bit_info[j];
}
}
System.out.print(res);
}
}
Python代码
import functools
import sys
# 处理输入
n = int(input())
nums = [int(x) for x in input().split(" ")]
res = 0
bit_info =[0 for x in range(100)]
for num in nums:
num_binary = bin(num).replace('0b','').lstrip('0');
if (num_binary == ""):
bit_info[0]+=1
else:
bit_info[len(num_binary)]+=1
result = 0
for i in range(len(bit_info)):
for j in range(i+1, len(bit_info)):
result += bit_info[i] * bit_info[j]
print(result)
JS代码
function main(nums) {
let bit_info = new Array(100).fill(0);
for (let num of nums) {
let num_binary = Number(num).toString(2);
if (num_binary == "0") {
bit_info[0]++;
} else {
bit_info[num_binary.length]++;
}
}
bit_info = bit_info.filter(function(a) {
return a != 0
})
let result = 0;
for (let i = 0; i < bit_info.length; i++) {
for (let j = i + 1; j < bit_info.length; j++) {
result += bit_info[i] * bit_info[j];
}
}
console.log(result);
}
main([4, 3 ,5 ,2])