(HDU - 2176)取(m堆)石子游戏(尼姆博弈)
题目链接:取(m堆)石子游戏 - HDU 2176 - Virtual Judge (ppsucxtt.cn)
这道题目考察的还是对尼姆博弈的理解,一开始给定n堆石子,我们将n堆石子数目进行异或,当异或值为0时先手必败,反之先手必胜,如果n堆石子的数目异或值不为0,先手的操作目的就是使其异或值重新归0来使后手进入必败态,不妨假设n堆石子的数目分别为a1,a2,a3,……,an,设a1^a2^a3^……^an=k,则有a1^a2^a3^……^an^k=k^k=0,而我们的具体操作就是选择一堆石子ai,将其数目与k进行异或,并将其值变为ai^k即可,那结合实际情况易知,ai^k 【(HDU - 2176)取(m堆)石子游戏(尼姆博弈)】下面是代码:
#include
#include
#include
#include
#include
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n==0) break;
int ans=0;
for(int i=1;
i<=n;
i++)
{
scanf("%d",&a[i]);
ans^=a[i];
}
if(ans==0) puts("NO");
else
{
bool flag=false;
for(int i=1;
i<=n;
i++)
if((ans^a[i])
推荐阅读
- 取名——兰
- 调取接口时报404错误(ID:16)
- 使用协程爬取网页,计算网页数据大小
- 66万奔驰漏油事件看宝宝无理取闹
- EditText默认不获取焦点弹出键盘
- 取悦应该属于自己
- whlie循环和for循环的应用
- 天河水到底怎么推(取天河水啥意思?看完这篇搞清楚了!)
- ExcelPackage读取写入
- 为什么有些取得大成就的聪明人依旧过不好这一生()