思路;
1、这是一个简单的nim游戏
先手必胜 :a1 ^ a2 ^ a3 ^ ... ^ an != 0
先手必败: a1 ^ a2 ^ a3 ^ ... ^ an == 0
2、判断先手赢第一步可以怎么走
判断第二步时,先手一定必胜,假设 a1 ^ a2 ^ a3 ^ ... ^ an == k,若 a1 ^ a2 ^ ... ^ ai' ^ ... ^ an == 0,ai' = ai * k ,此时不成立,要想满足先手必胜,条件为 ai' > ai * k。
#include <iostream>
using namespace std;
const int N = 110;
int m, res,sum;
int a[N];
int main()
{
while (cin >> m && m)
{
res = 0;
for (int i = 0; i < m; i++)
{
cin >> a[i];
res ^= a[i];
}
if (res == 0) cout << 0 << endl;
else
{
sum = 0;
for (int i = 0; i < m; i++)
{
if ((res ^ a[i]) < a[i])
sum++;
}
cout << sum << endl;
}
}
return 0;
}