本文主要是介绍HDU 1850 博弈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*这是尼姆博弈题要让先手赢的话,先手从第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 博弈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!