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 翻译