博弈论练习题
前导知识
:
1. 取火柴游戏
#include <cstdio>
using namespace std;
const int N = 5e5 + 100;
int a[N],k,n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
k^=a[i];
}
if(!k) return puts("lose"),0;
int ansa=0,ansb=0;
for(int i=1;i<=n;i++){
int t=k^a[i];
if(t>a[i]) continue;
ansa=a[i]-t;
ansb=i;
break;
}
printf("%d %d\n",ansa,ansb);
a[ansb]-=ansa;
for(int i=1;i<=n;i++){
printf("%d%c",a[i],i==n?'\n':' ');
}
return 0;
}