是 尼姆+巴什博弈;
主要看最后余下的每堆的数量在异或;
如果最后的异或是先手胜;必胜策略:
假设一堆有 a个石头, 最多拿走b个 先手拿走k个 后手拿走m个 先手在拿走 b+1-m个,。。。
最后先手要剩下 a%(b+1);
每一堆都这样处理;
如果后手必胜的话
先手拿走k个 后手拿走b+1-k个
最后异或;
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int m, a, b;
cin >> m;
int ans = 0;
for(int i = 0; i < m; i++)
{
cin >> a >> b;
ans ^= a%(b+1);
}
if( ans )
cout <<"No" << endl;
else
cout << "Yes" <<endl;
}
}
hdu1851
最新推荐文章于 2020-07-15 15:03:44 发布
本文介绍了一种结合尼姆博弈与巴什博弈的游戏策略。重点在于通过计算每堆剩余石头数量的异或值来判断游戏胜负,并提供了一种实现此策略的C++代码示例。
500

被折叠的 条评论
为什么被折叠?



