HDU 1850 Being a Good Boy in Spring Festival (Nim游戏变形)

来源:互联网 发布:淘宝双十一抽奖在哪里 编辑:程序博客网 时间:2024/05/16 13:49



题意:经典Nim游戏博弈,给你n堆牌,每堆a[i]张,每次能从一堆中取出任一张(不能为0),最后不能取者为输

问先手有几种取法保证他最后能获胜。


思路:让Nim_sum=0(a[1]^a[2]…………^a[n]=0)时则输,利用这个定理,对于第i堆a[i],除了第i堆,其它的

Nim_sum=k,如果a[i]>k,则先手从第i堆可以取a[i]-k张牌,让a[i]=k,最后a[i]^k==0。



#include<cstdio>#include<stdlib.h>#include<string.h>#include<string>#include<map>#include<cmath>#include<iostream>#include <queue>#include <stack>#include<algorithm>#include<set>using namespace std;#define INF 1e8#define eps 1e-8#define LL long longint main(){int n;int a[110];while(scanf("%d",&n)&&n){int st=0;for(int i=0;i<n;i++){scanf("%d",&a[i]);st^=a[i];}int ans=0;if(st==0){printf("0\n");}else {for(int i=0;i<n;i++){if((st^a[i])<=a[i])//xor可以互逆ans++;}printf("%d\n",ans);}}return 0;}


0 0
原创粉丝点击