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)

posted @ 2020-07-22 20:26  wqtnb_tql_qwq_%%%  阅读(101)  评论(0编辑  收藏  举报