CF1420B Rock and Lever
题目描述
“你必须抬起大坝。用杠杆。我会把它给你。你必须用石头堵住运河。我不会把石头给你。”
Danik 急需石头和杠杆!显然,最简单的办法就是向 Hermit Lizard 要这些东西。
Hermit Lizard 同意把杠杆给 Danik。但要得到石头,Danik 需要解决如下问题。
给定一个正整数 $n$,以及一个由正整数组成的数组 $a$。任务是计算有多少对 $(i, j)$ 满足 $i < j$ 且 $a_i \& a_j \ge a_i \oplus a_j$,其中 $\&$ 表示[按位与运算](https://en.wikipedia.org/wiki/Bitwise_operation#AND),$\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。
Danik 已经解决了这个问题。但你能解决吗?
输入格式
每个测试点包含多组测试数据。
第一行包含一个正整数 $t$($1 \le t \le 10$),表示测试用例的组数。接下来是每组测试用例的描述。
每组测试用例的第一行包含一个正整数 $n$($1 \le n \le 10^5$),表示数组的长度。
第二行包含 $n$ 个正整数 $a_i$($1 \le a_i \le 10^9$),表示数组的元素。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
对于每组测试用例,输出一个非负整数,表示满足条件的数对数量。
说明/提示
在第一个测试用例中,只有一对 $(4,7)$ 满足条件:$4 \& 7 = 4$,$4 \oplus 7 = 3$。
在第二个测试用例中,所有的数对都满足条件。
在第三个测试用例中,有两对满足条件:$(6,5)$ 和 $(2,3)$。
在第四个测试用例中,没有满足条件的数对。
由 ChatGPT 4.1 翻译