CF742B Arpa’s obvious problem and Mehrdad’s terrible solution

题目描述

在 Arpa 的土地上有一些美丽的女孩,如前所述。 有一天,Arpa 想到了一个显然的问题: 给定一个数组和一个数字 $x$,计算有多少组索引对 $i, j$($1 \leq i < j \leq n$),使得 $a_i \oplus a_j = x$,其中 $\oplus$ 表示按位异或运算(关于异或运算的解释请见提示)。 Mehrdad 立刻想出了一个没人相信的糟糕算法。现在 Arpa 需要你的帮助来实现该问题的正确解法。

输入格式

第一行包含两个整数 $n$ 和 $x$($1 \leq n \leq 10^5,\ 0 \leq x \leq 10^5$),分别表示数组的元素个数和给定的整数 $x$。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^5$),表示数组的各个元素。

输出格式

输出一个整数,表示满足条件的索引对数量。

说明/提示

在第一个样例中,只有一组 $i=1$ 和 $j=2$。$a_1 \oplus a_2 = 1$,因此答案为 $1$。 在第二个样例中,只有两组 $i=3,\ j=4$(因为 $a_3 \oplus a_4 = 4$),以及 $i=1,\ j=5$(因为 $a_1 \oplus a_5 = 4$)。 按位异或操作对两个等长的二进制整数的对应位执行逻辑异或运算。每一位的结果为 $1$ 当且仅当一个是 $1$ 另一个是 $0$,否则为 $0$。你可以在这里阅读更多关于按位异或运算的内容:[https://en.wikipedia.org/wiki/Bitwise\_operation#XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 由 ChatGPT 5 翻译