哈希表和位运算

有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);

}

}

posted @ 2026-06-10 22:22  鬼计i  阅读(5)  评论(0)    收藏  举报