这题纯是考察异或和的性质,如果一个序列能够拆分成两个异或和相等的序列,假设这两个序列的异或和为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);
}
}



京公网安备 11010502036488号