尼姆博弈

规则: 有若干堆石子,每次从某一堆中取出任意个,全部取完胜
结论: 若石子数异或为0,则先手必败,否则必胜
证明:
用( a 1 , a 2 . . . a n a_1,a_2...a_n a1,a2...an)表示局势
若异或和不为0,设a1 ^ a2 ^ …^ an = k;那么就意味着:a1 ~ an中,k的二进制对应的1的位数总数为奇数。那么在a1~an中,一定存在一个数ai,它含有k的二进制表示的最高位,那么ai^k < ai,所以我们只要将ai取为ai ^ k即可,这样a1 ^ a2 ^ … ^ an =0;
那么对于它们的二进制数,任意一位上的1的个数总和一定是偶数个,由于只能在一堆中取,所以取完异或和一定不为0(先手取完),根据上面的策略,下一次取一定能使得异或和为0(后手取)。以此循环下去,由于总数一直在下降,所以一定是由后手取完石子,先手必败。

/*
有若干堆石子,每次从某一堆中取出任意个,全部取完胜
若石子数异或为0,则先手必败,否则必胜
*/

#include <cstdio>

int main()
{
	int n,ans = 0;
	scanf("%d",&n);
	for (int i = 1; i <= n; i++)
	{
		int x;
		scanf("%d",&x);
		ans ^= x;
	}
	if( ans == 0 ) printf("second win\n");
	else printf("first win\n");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值