这题纯是考察异或和的性质,如果一个序列能够拆分成两个异或和相等的序列,假设这两个序列的异或和为x,那么x^x=总的序列和y,而根据异或的性质,x^y=x,也就是异或可交换,那么y==0即可,所以直接判断y是否为0就能判断最终答案

下面程序中如果使用dfs,那么只能过一个测试点,其它都会超时


import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<ArrayList<Integer>> res;
static boolean flag;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int t=sc.nextInt();
		while(t-->0) {
			int n=sc.nextInt();
			int a[]=new int[n+1];
			int ans2=0;
			for(int i=1;i<=n;i++) {
				a[i]=sc.nextInt();
				ans2^=a[i];
			}
//			flag=false;
//			dfs(a,new ArrayList(),res,1,ans2);
			if(ans2==0) {
				System.out.println("YES");
			}else {
				System.out.println("NO");
			}
			
			
		}

	}
	public static void dfs(int a[],ArrayList<Integer> list,ArrayList<ArrayList<Integer>> res,int n,int ans2) {
		if(n==a.length-1) {
			if(list.size()!=0&&list.size()!=a.length-1&&!flag) {
//				res.add(new ArrayList<Integer>(list));
				int ans=0;
				for(Integer x:list) {
					ans=ans^x;
				}
				if((ans^ans2)==ans) {
					flag=true;
				}
			}
			
			return;
		}
		
		dfs(a,list,res,n+1,ans2);
		list.add(a[n]);
		
		dfs(a,list,res,n+1,ans2);
		list.remove(list.size()-1);
		
		
		
	}

}