标签:
#include <iostream>
#include <algorithm>
#define ss(a) scanf("%d",&a)
#define ss64(a) scanf("%I64d",&a)
using namespace std;
int main()
{
int a[100],i,n,m,sum,cnt,j;
while(~ss(n),n)
{
cnt=0;
for (i=0,sum=0;i<n;i++)
{
ss(a[i]);
sum ^=a[i];
}
if (sum==0)
{
cout<<"0"<<endl;
}
else
{
for (i=0;i<n;i++)
{
sum=0;
for (j=0;j<n;j++)
{
if(i==j)
continue;
sum ^=a[j];
}
if (a[i]>=sum)
cnt++;
}
cout<<cnt<<endl;
}
}
return 0;
}
典型的Nim博弈。
对所有数异或,如果为0,则先手是必败,直接输出0结束;
如果不为0,再进行计算有几个方案,例如输入的事 5 7 8 9 10 (5堆扑克牌)
那么对于(5 7 8 9 10)呢?
1.从5中取不了,因为7^8^9^10=12
2.从7中取不了,因为5^8^9^10=10
3.可以从8中取1个(5,7,7,9,10)
4.可以从9中去除0个(5 ,7, 8, 9, 10)
5.可以从10中去除3个(5,7,8,9,7)
3 5 7 9 0
1
HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
标签:
原文地址:http://blog.csdn.net/xinwen1995/article/details/45691777