作者:岸芷汀兰
一、题目:
二、思路:
这可能是博弈论最简单的题了。
在这里,只简单的唠叨几句。
定理:
NIM博弈先手必胜,当且仅当A1 xor A2 xor A3 xor … xor An ≠0。
证明略。
三、代码:
//写得太丑
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
inline int read(void){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
}
const int maxn=500005;
int n,a[maxn];
int main(){
n=read();
for(register int i=1;i<=n;i++){
a[i]=read();
}
int ans=0;
for(register int i=1;i<=n;i++){
ans^=a[i];
}
if(!ans){puts("lose");return 0;}
int k;
for(register int i=31;i>=0;i--){
if((ans>>i)&1){k=i;break;}
}
for(register int i=1;i<=n;i++){
if((a[i]>>k)&1){
int temp=a[i]^ans;
printf("%d %d\n",a[i]-temp,i);
for(register int j=1;j<=n;j++){
if(i==j){printf("%d ",temp);continue;}
printf("%d ",a[j]);
}
puts("");
break;
}
}
return 0;
}