题目:https://www.luogu.org/problemnew/show/P1247
可以知道必败局面为n[1]^n[2]^...^n[k]=x=0;
而若x不等于0,则一定可以取一次使其变为0,所以此时为必胜;
取火柴数即为n[i]^x,取掉后异或和变为0;
因为取火柴数为正数,所以要n[i]>n[i]^x。
代码如下:
#include<iostream> #include<cstdio> using namespace std; int k,n[500005],x; int main() { scanf("%d",&k); for(int i=1;i<=k;i++) { scanf("%d",&n[i]); x^=n[i]; } if(x==0) { printf("lose"); return 0; } for(int i=1;i<=k;i++) if((n[i]^x)<n[i]) { printf("%d %d ",n[i]-(n[i]^x),i); n[i]=(n[i]^x); for(int j=1;j<=k;j++) printf("%d ",n[j]); return 0; } }