本文主要是介绍poj2975 Nim,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Nim博弈,问有多少种胜利的方法,
因为答案最多只有n,令ans=a1^a2^...^an,如果需要构造出异或值为0的数,
而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子
的异或值,如果ans^ai< ai,那么对于ai的话,是可以减小到ans^ai的值。将结果统计。
Source CodeProblem: 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 + 10int 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;
}
这篇关于poj2975 Nim的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!