HDU1851A Simple Game(SG定理)

来源:互联网 发布:绘制网络拓扑结构图 编辑:程序博客网 时间:2024/06/15 06:48

简单博弈问题(巴什博弈-Bash Game)

巴什博弈:只有一堆n个物品,两个人轮流从这对物品中取物,规定每次至少取一个,最多取m个,最后取光着得胜。

很容易想到当n%(m+1)!=0时,先取者必胜,第一次先拿走n%(m+1)个,以后每个回合都保持两人拿走的物品总和为m+1即可。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报10个,谁能报到100者胜。

题意:有n堆石头,每堆有mi个石头,每次可从其中的一堆中最少取一个,最多取li个。老师每次都先取,最后取光者为胜。
算法分析:

此题可以把每堆石头的取法看作是一个BashGame,这样只需将每组石头按照BashGame的取法判断,然后将n堆石头做异或,如果异或的结果不为0,则老师获胜,否则Agrael取胜。

#include<iostream>using namespace std;int main(){    int T, m, l, n;    cin >> T;    while(T--)    {        int ans = 0;        cin >> n;        for(int i = 0; i < n; i++)        {            cin >> m >> l;            ans ^= m%(l+1);        }        if(ans == 0)            cout << "Yes\n";        else            cout << "No\n";    }    return 0;}


0 0