U614232 XOR

题目背景

一天晚上,**饶李健**在b站直播丝之歌,突然看到**俊潇**进入了直播间。 饶便大声喊叫:俊潇你不加训又来看我直播,来来来我考考你。

题目描述

给你一个包含 $n$ 个正整数的数组 $a$,你最多可以执行一次操作:选择一个下标 $i \ (1 \leq i \leq n)$ 和一个正整数 $x \ (x \leq a_i)$,将 $a_i$ 修改为 $a_i - x$。目标是使得最终数组的异或和为 $0$。 请输出你选择的下标 $i$ 和 $x$。如果无法实现该目标,或者初始数组的异或和已经为 $0$,则输出 $-1$。 【名词解释】 **异或**(XOR)是一种二进制逻辑运算,符号为 $\oplus$,其运算规则如下: $0 \oplus 0 = 0$ $0 \oplus 1 = 1$ $1 \oplus 0 = 1$ $1 \oplus 1 = 0$ **异或和**:两个数进行按位异或运算的结果。 **数组的异或和**:将一个数组中所有的元素依次进行异或运算后得到的结果。

输入格式

第一行包含一个整数 $n$ ( $1 \leq n \leq 10^7$ ),表示数组 $a$ 的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$ ( $1 \leq a_i \leq 10^9$ ),表示数组 $a$ 的元素。

输出格式

输出共一行。 如果初始数组的异或和已经为 $0$,或者无法通过最多一次操作使数组异或和变为 $0$,则输出 -1。 否则,输出两个整数 $i$ 和 $x$ ( $1 \leq i \leq n$, $1 \leq x \leq a_i$ ),表示你选择将 $a_i$ 减去 $x$。如果有多种可行解,请输出任意一种。

说明/提示

样例一:初始数组的异或和为 $2 \oplus 2 \oplus 2 = 2$。将第一个元素 $a_1$ 减去 $2$ 后,数组变为 $[0, 2, 2]$,此时异或和为 $0 \oplus 2 \oplus 2 = 0$,满足要求。 样例二:初始异或和 $1 \oplus 2 \oplus 3 = 0$,根据题目要求,此时应直接输出 $-1$。 ## 提示 本题输入量较大,如果使用 `cin` 请关闭同步流(方式如下) ``` int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); //只需要多加这一句话 // 你的代码 return 0; } ```