51nod 1185 威佐夫游戏 V2(威佐夫博弈)

原创 2016年08月30日 20:58:21

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔。(1 <= N <= 10^18)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Input示例
3
3 5
3 4
1 9
Output示例
B
A
A

一道威佐夫博弈的模板题,这里我要科普一下啊,博弈论一般分三大博弈论和SG函数,三大博弈论分别是威佐夫博弈,Nim博弈和布什博弈,这里我有三个博弈的算法分析,来,我们来日常膜菊苣吧!

三大博弈论学习链接~:http://blog.csdn.net/theprinceofelf/article/details/7225206

然后上代码吧!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
LL tmp[3] = {618033988,749894848,204586834};
LL MOD = 1000000000;
int main()
{
    int T;
    LL m, n;
    cin>>T;
    while(T--)
    {
        cin>>m>>n;
        if(m < n)
            swap(n, m);
        LL cha = m - n;
        LL ta = cha/MOD, tb = cha%MOD;
        LL tp = tb*tmp[2];
        tp = ta*tmp[2] + tb*tmp[1] + tp/MOD;
        tp = ta*tmp[1] + tb*tmp[0] + tp/MOD;
        tp = cha + ta*tmp[0] + tp/MOD;
        if(tp == n)
            puts("B");
        else
            puts("A");
    }
    return 0;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

[51Nod 1185 威佐夫游戏 V2]Wythoff Game+乘法模拟

[51Nod 1185 威佐夫游戏 V2]Wythoff Game+乘法模拟题目链接:[51Nod 1185 威佐夫游戏 V2] 题意描述:有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取...

51NOD 1185 威佐夫游戏 V2(大数运算 JAVA 模板)

传送门::  点我 点我   http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1185 1185 ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

HDOJ 取石子游戏(威佐夫博弈)

取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm...

POJ-1067 取石子游戏(威佐夫博弈)

直接是:威佐夫博弈。 这个过于繁琐,只能运用现成的结论。 设奇异局势(必败局势)为(a[i],b[i]),则有a[0]=b[0]=0;a[k]=前面未出现的最小自然数,b[k]=a[k]+k 具...

百练_1067取石子游戏(威佐夫博弈)

1067:取石子游戏 描述:         有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同...

hdu 2177 取(2堆)石子游戏 (威佐夫博弈求取后状态+二分)

取(2堆)石子游戏Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

poj 1067 取石子游戏(威佐夫博弈模板)

取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39330   Accepte...

HDU2177:取(2堆)石子游戏(威佐夫博弈)

Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相...

acm杭电HDU2177取(2堆)石子游戏(威佐夫博弈)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2177 取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Oth...

hdu2177 取(2堆)石子游戏----威佐夫博弈,输出第一步最优策略

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)