哈希表和位运算
有n个数字王国,每个王国都有一个数值a_i。现在需要统计三元组(i,j,k)的数量,要求1≤i,j,k≤n,且a_i、a_j、a_k三个数进行按位与运算的结果等于0。
输入格式:
第一行输入一个整数n。
第二行输入n个整数,依次为a₁到aₙ。
数据范围:
3 ≤ n ≤ 1000
每个数值满足 0 ≤ a_i < 2的16次方
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i = 0;i < n; i++){
arr[i] = scanner.nextInt();
}
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0;i < n; i++){
for(int j = 0;j < n; j++){
int www = arr[i] & arr[j];
map.put(www, map.getOrDefault(www, 0) + 1);
}
}
int count = 0;
for(int i = 0;i < n; i++){
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
if((entry.getKey() & arr[i]) == 0 ){
count += entry.getValue();
}
}
}
System.out.println(count);
}
}
浙公网安备 33010602011771号