介绍:
有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
正解
每堆物品的数量进行异或运算 结果等于0 就是奇异局势 就是必败态
原理
我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。
这些局势都满足 a^ b ^c=0
而异或运算法则是 相同为0 不同为1 根据运算法则 面对奇异局你不论怎么拿 都不会还=0(满足性质2)
而不满足的a^ b ^c=0的局势 我们都可以使其变成a^ b^c=0
因为 局面(a,b,c) 我们只要令最大的数 比如是a 令a=b+c 就变成了 (b+c)^ b^ c=(b^ b)+(c^c)=0(满足性质1)
所以 a^b ^c=0就是i我们要找的奇异局势 必败状态
————————————————————————————————————
类型一:先手的人想赢,第一步有多少种选择呢?
#include<stdio.h>
#include<math.h>
int a[105];
int main()
{
int i,j,k;
int n;
while(~scanf