博弈综合

原创 2016年08月30日 21:38:51

题目:hdu5754

题意有4种操作分别是:
1.king.每次横或者竖或者斜只能走一步
2.rook(castle).每次横或者竖能走若干步
3.knight.每步先横(竖)走一格,再斜走一格。或者每步先斜走一格,再横(竖)走一格
4.queen.每次横或竖或斜走若干步
然后这些操作对应的是国际象棋里面的一些操作(具体操作可以百度) 然后现在我们站在(1,1)点,要去往(N,M)点,按照国际象棋操作的时候只能往右或者往下走,然后有两个人进行按照规则进行操作,谁最先到达(N,M)点谁就胜出。

解答:1、再想想吧。有人说是巴什博弈?或者根据博弈的规律推?

          2、走到终点的时候,恰好横着走了m-1步,竖着走了n-1步。所以这个问题就可以转化为有两堆石子的Nim游戏。谁先拿完这两堆棋子谁就就赢。(两堆石子的数量为n-1和m-1)。

          3、这个每走一次相当于从一堆石子里面拿两个,从另一堆石子里面拿一个。如果石子的和不是3的倍数很显然不能拿完。

如果是,如果两个石子数目相同,那么先手必败,因为第一个人从第一个里面拿一个第二个里面拿两个,你就从第二个里面拿一个从第一个里面拿两个,石子数目仍然相同,最后拿没了。如果两堆石子的差为1的话,第一个人拿完让他们相等就到了奇异局势。

其他的情况,一个人想办法变成奇异局势另外一个人肯定会阻止最后的结果就是平局。

          4、也把它转化为两堆石子。两个人可以任选一堆拿一个,或者两堆同时拿一样数目的石子,谁先拿完谁赢。哦这就是典型的威佐夫博弈。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    int T,k,m,n;
    scanf("%d",&T);
    while(T--)
    {
        int ans = 1;//先手赢
        scanf("%d%d%d",&k,&m,&n);
        if(k == 1)
        {
            if((m&1)&&(n&1))
                ans = 0;
        }
        else if(k == 2)
        {
            if(((n-1)^(m-1)) == 0)
                ans = 0;
        }
        else if(k == 3)
        {
            n--;
            m--;
            if((m+n)%3)
                ans = 2;
            else if(m == n)
                ans = 0;
            else if(m == n+1 || n == m+1)
                ans = 1;
            else
                ans = 2;
        }
        else if(k == 4)
        {
            m--;
            n--;
            if(m > n)
            {
                int t = m;
                m = n;
                n = t;
            }
            int tmp = floor((n - m) * (sqrt(5.0)+1)/2);
            if(tmp == m)
                ans = 0;
        }
        if(ans == 0)
        puts("G");
        else if(ans == 1)
        puts("B");
        else if(ans == 2)
        puts("D");
    }
    return 0;
}



          

         

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

相关文章推荐

田忌赛马博弈矩阵分析

  • 2017年10月28日 00:31
  • 8KB
  • 下载

UVA 10891 Game of Sum 总和一定的博弈,区间dp

参考:刘汝佳大白书p67-p69 整数的总和是一定的,所以一个人得分越高,另一个人的得分越低。 不管任意时刻游戏的状态都是原始序列的一段连续子序列,(因而可用区间dp) //#pragma ...
  • guognib
  • guognib
  • 2013年10月27日 10:46
  • 908

五子棋 HTML5(不含与电脑博弈)

  • 2017年03月08日 11:10
  • 4KB
  • 下载

HDOJ2897(巴什博弈变形-找规律)

这道题目乍一看像是巴什博弈,仔细斟酌的话,我们可以发现,这种博弈是可以找到规律的: 先说题目: Problem Description 每行有三个数字n,p,q,表示一堆硬币一共有n枚,从这...

博弈大师安装版

  • 2013年04月19日 17:23
  • 3.6MB
  • 下载

蓝桥杯 高僧斗法(Nim博弈)

历届试题 高僧斗法   时间限制:1.0s   内存限制:256.0MB        问题描述   古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑...

博弈模型研究

  • 2014年02月27日 16:43
  • 2.94MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:博弈综合
举报原因:
原因补充:

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