Nim博弈,问有多少种胜利的方法,
因为答案最多只有n,令ans=a1^a2^...^an,如果需要构造出异或值为0的数,
而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子
的异或值,如果ans^ai< ai,那么对于ai的话,是可以减小到ans^ai的值。将结果统计。
Source Code
Problem: 2975 User: 455707843
Memory: 756K Time: 391MS
Language: G++ Result: Accepted
Source Code
#include <iostream>
using namespace std;
#define oo (~0U >> 1)
#define MAXN 1000 + 10
int temp[MAXN];
void input()
{
int n;
while (cin >> n, n)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> temp[i];
sum ^= temp[i];
}
if (!sum)
{
cout << 0 << endl;
}
else
{
int ans = 0;
for (int i = 0; i < n; i++)
{
if ((sum ^ temp[i]) < temp[i])
{
ans++;
}
}
cout << ans << endl;
}
}
}
int main()
{
input();
return 0;
}