博弈--hdu5754 Life Winner Bo

4种棋子1.king.2.rook(castle).3.knight.4.queen.从(1,1)移到(n,m)

给定type,n,m,B先手,求B,G胜,或平局D(没有到终点却无法移动)


#include <iostream>

#include <cstdio>

#include <cmath>

using namespace std;


int main()

{

    int T;

    cin >> T;

    int n,m,t;

    while (T --) {

        scanf("%d%d%d",&t,&n,&m);

        if(n > m) swap(n, m);

        if(t == 1){//king 横竖斜只能走一步,同kiki's game

            if(n % 2 && m % 2) printf("G\n");

            else printf("B\n");

        }

        else if(t == 2){//车,G先走到(1,m - n + 1),接下来围绕对角线走

            if (n == m) printf("G\n");

            else printf("B\n");

        }

        else if(t == 3){//PN图

            if(n == m && (n - 1) % 3 == 0) printf("G\n");

            else if(n + 1 == m && m % 3 == 0) printf("B\n");

            else printf("D\n");

        }

        else{//威佐夫博弈

            m --,n --;

            int k = m - n;

            if(n == (int)((1.0 + sqrt(5.0)) * k / 2.0) ) printf("G\n");

            else printf("B\n");

        }

    }

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值