题意:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
现在我们不想研究到底先手为胜还是为负,我只想问大家:
——“先手的人如果想赢,第一步有几种选择呢?”
分析:没什么好说的,就是典型的异或求解问题
#include<iostream>
#include<string.h>
#include<sstream>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
typedef long long ll;
const int maxn = 100+10;
int M[maxn];
int main(){int m;while (cin >> m&&m) {int sum = 0;for (int i = 0; i < m; i++) { cin >> M[i]; sum ^= M[i];}if (sum == 0)cout << "0" << endl;else {int cnt = 0;int ans = 0;for (int i = 0; i < m; i++) {ans = sum ^ M[i];if (ans < M[i])cnt++;}cout << cnt << endl;}}return 0;
}