2933. 最大异或对
时间限制:1000 MS 内存限制:128 MB
题目描述
# 最大异或对 ## 题目描述 给定一个长度为 $N$ 的非负整数序列 $A_1, A_2, \dots, A_N$。你需要从中选择两个数 $A_i$ 和 $A_j$($1 \le i, j \le N$,允许 $i = j$),使它们的按位异或结果 $A_i \oplus A_j$ 最大。 其中,$\oplus$ 表示按位异或运算:对于二进制表示中的每一位,若两个数在该位上不同,则结果的该位为 $1$;否则为 $0$。 请你求出最大的异或值。 ## 输入格式 从文件 `maxxors.in` 中读入数据。 输入共两行。 第一行包含一个正整数 $N$,表示序列的长度。 第二行包含 $N$ 个非负整数,依次表示 $A_1, A_2, \dots, A_N$,相邻两个数之间用空格隔开。 ## 输出格式 输出到文件 `maxxors.out`。 输出一个整数,表示最大的异或值。 ## 数据范围 - 对于 $30\%$ 的数据:$1 \le N \le 1000$。 - 对于 $100\%$ 的数据:$1 \le N \le 100000$,$0 \le A_i < 2^{31}$。 - 选择的下标满足 $1 \le i, j \le N$,允许 $i = j$。 ## 样例输入 #1 ``` 5 3 10 5 25 2 ``` ## 样例输出 #1 ``` 28 ``` ## 样例输入 #2 ``` 8 15 3 22 30 9 12 18 5 ``` ## 样例输出 #2 ``` 31 ``` ## 样例说明 ### 样例 #1 选择 $5$(二进制表示为 `00101`)和 $25$(二进制表示为 `11001`),可以得到最大的异或值: $$ 5 \oplus 25 = 28 $$ 结果的二进制表示为 `11100`。 ### 样例 #2 选择 $22$(二进制表示为 `10110`)和 $9$(二进制表示为 `01001`),可以得到最大的异或值: $$ 22 \oplus 9 = 31 $$ 结果的二进制表示为 `11111`。 ## 资源限制 - 时间限制:$1000$ 毫秒。 - 内存限制:$128$ MB。