AC

元梦  •  11个月前


include<bits/stdc++.h>

using namespace std; int p[35],a[1005],aw[35]={0}; int main(){

p[0]=1;
for(int i=1;i<=31;i++){
	p[i]=p[i-1]*2;
}
int n;
cin>>n;
for(int i=1;i<=n;i++){
	cin>>a[i];
	// 用每一个数和二进制基数与运算,如果相等则aw数组来存a[i]的二进制值
	//与之前所有堆中个数的二进制相加
	for(int j=0;j<=31;j++){
		if((a[i]&p[j])==p[j]) aw[j]++;
	} 
}
int idx=-1;
for(int i=31;i>=1;i--){
	if(aw[i]%2==1){
		idx=i;
		break;
	}
}
if(idx==-1){
	cout<<"lose"<<endl;
	return 0;
}else{
	for(int i=1;i<=n;i++){
		if((a[i]&p[idx])==p[idx]){//与运算 
			int f=a[i];
			for(int j=idx;j>=0;j--){
				if(aw[j]%2==1) f^=p[j];//异或 
			}
			cout<<a[i]-f<<" "<<i<<endl;
			a[i]=f;
			for(int j=1;j<=n;j++) cout<<a[j]<<" ";
			cout<<endl;
			return 0;
		}
	}
}
return 0;

}


评论:

请先登录,才能进行评论