尼姆博弈的大致描述:有若干堆的石子,每堆石子的个数是任意的,让两个玩家轮流拿走一些石子,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。
结论就是:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜。(不要问我为什么,因为我也不知道为什么要这样算……)
代码同样很简单:
#include<stdio.h>
int main(){
int n,temp,t;
while(~scanf("%d",&n)){//每个样例有n石子
temp = 0;
for(int i = 0; i < n; i ++){
scanf("%d",&t);//输入每堆石子的个数
temp ^= t;//异或
}
if(temp == 0)
printf("先手必败\n");
else
printf("先手必胜\n");
}
return 0;
}