【模板】nim 游戏

link

一道经典的博弈论题目。

首先说结论,先手必胜当且仅当所有堆的石头数异或和不为0。原因是假如所有堆的石头异或和不为0时必然有一种方法可以使得异或和变成0,而当异或和等于0时不论怎么取都会使得异或和变成非0数。这样下去总会有一个时候使得异或和为0后所有石头堆都为0,那么这样先手必胜。

感觉最近的随笔越来越水了。

#include<cstdio>
//#define zczc
inline void read(int &wh){
    wh=0;int f=1;char w=getchar();
    while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
    while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
    wh*=f;return;
}

int T,m,now,in;

signed main(){
	
	#ifdef zczc
	freopen("in.txt","r",stdin);
	#endif
	
	read(T);
	while(T--){
		read(m);now=0;
		while(m--){read(in);now^=in;}
		if(now)printf("Yes\n");
		else printf("No\n");
	}
	
	return 0;
}
posted @ 2022-02-19 15:43  Feyn618  阅读(28)  评论(0编辑  收藏  举报