本文主要是介绍HDU 2176 尼姆博弈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
</pre><pre name="code" class="cpp">/*这是尼姆博弈题题目要求输出所有第一次取某堆的数量和剩下的数量如果用常规的方法做的话,肯定会超时所以我们必须要知道位运算的一个重要的性质,那就是:a^b^c^d=e; d^e=a^b^c
*/
#include<iostream>
using namespace std;
int num[200002];
int main()
{int m;while(cin >> m && m){int t = 0;for(int i = 1; i <= m; i++){cin >> num[i];t ^= num[i];}if(!t) cout << "No" << endl;//判断如果是必败的情况直接输出Noelse{cout << "Yes" << endl;for(int i = 1; i <= m; i++)if((num[i]^t) < num[i])//由于运算符优先级的问题,所以位运算在这里要加上括号cout << num[i] << " " << (num[i]^t) << endl;}}return 0;
}
这篇关于HDU 2176 尼姆博弈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!