/*
这是尼姆博弈题
要让先手赢的话,先手从第i堆牌中取出x张牌后
剩下的n-1堆异或的结果和第i剩下的异或为0,那先手一定能赢
那么只有当第i堆牌数大于剩下n-1堆牌的异或结果时,先手一定赢
*/
#include<iostream>
using namespace std;
int main()
{
int n, card[102];
while(cin >> n && n)
{
int t = 0, cont = 0;
for(int i = 1; i <= n; i++)
{
cin >> card[i];
t ^= card[i];//所有的牌先异或,看是否等于0,等于0那么先手就没有赢的可能了
}
if(t)
{
for(int i = 1; i <= n; i++)
{
int k = 0;
for(int j = 1; j <= n; j++)
if(i != j)
k ^= card[j];//第i堆牌剩下的牌进行异或
if(k < card[i])//若第i堆牌大于剩下牌的异或,则这步可行
cont++;
}
}
cout << cont << endl;
}
return 0;
}
HDU 1850 博弈
最新推荐文章于 2019-08-20 22:25:23 发布