luogu P1247
#include <cstdio>
using namespace std;
int n,a[500010],ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
ans=a[1];
for(int i=2;i<=n;i++)ans^=a[i];
if(!ans)puts("lose");
else {
for(int i=1;i<=n;i++){
if(a[i]>=(ans^a[i])){
printf("%d %d\n",a[i]-(ans^a[i]),i);
a[i]=ans^a[i];
break;
}
}
for(int i=1;i<=n;i++)printf("%d ",a[i]);
puts("");
}
return 0;
}
如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a < b< c,我们只要将 c 变为 a^b,即可,因为有如下的运算结果: a^b^(a^b)=(a^a)^(b^b)=0^0=0。要将c 变为a^b,只从 c中减去 c-(a^b)

浙公网安备 33010602011771号