问题描述:
输入格式:
输出格式:
样例输入:
2
3
1 2 3
4
1 2 3 4
样例输出:
YES
NO
说明/提示
评测用例规模与约定
- 对于 30% 的评测用例,1≤T≤10,2≤N≤100,1≤Ai≤10^3。
- 对于 100% 的评测用例,1≤T≤10^3,2≤N≤10^3,1≤Ai≤10^5。
思路:
根据题目中我们可以知道,要把一组数分成两组,每组至少一个数,要求这两组的异或和相等
样例:{1,2,3} 比如我们让 1,2一组 ,3为一组,这样就把这组数分为了两组,然后我们开始求异或 ( 要转为2进制计算,计算机内应该是以补码的形式进行计算,但是恰巧这个题全是正数,正数原码,反码,补码,都一样)。
第一组:
1 ^ 2 = 0000 0011;
第二组:
3 = 0000 0011;
这两组异或和相等,输出YES,我们还可以发现一个规律就是 分为两组异或和相等的二进制,再次异或和的值为“0”
所以我们直接把一组数一起求异或和,看是否等于0即可解决这题
案例代码:
import java.util.*;
public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int t = sc.nextInt();while(t!=0){boolean flag = false;int res = 0;int n = sc.nextInt();int[] arr = new int[n];for(int i=0;i<n;i++){arr[i] = sc.nextInt();}for(int i = 0; i < n-1;i++){res = arr[i] ^ arr[i+1];arr[i+1] = res;}if(res == 0){flag = true;}if(flag){System.out.println("YES");}else{System.out.println("NO");}t--;}}
}
洛谷提交后:
以上仅是本人的思路,并非最后的题解答案,有错误的话欢迎小伙伴提出~