元梦 • 1年前
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;
}
评论:
请先登录,才能进行评论