题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5754

给你四种棋子,棋子一开始在(1,1)点,两个人B和G轮流按每种棋子的规则挪动棋子,棋子只能往右下方移动,谁最后先挪动棋子到(n,m)位置,谁就胜利。要是两个人都不可能赢,就输出D。

king的情况在纸上模拟了一下,感觉就是当n*m为奇数时先手输,否则就赢。

rook的情况比较简单,相当于在两堆石子中取石子,只能在一堆中取。当n等于m时,先手必败,因为先手怎么取,后手都会跟上取 使得两堆石子相同。

knight的情况也是在纸上模拟了一下,发现4*4  7*7  10*10...这些情况先手都是输,因为先手无论怎走,后手都会调整方向,所以(n == m && (n - 1) % 3 == 0)时,先手输。

还有2*3  5*6  8*9...都是先手赢。其余都是平局。

queen的情况,比赛的时候没发现,原来是威佐夫博弈,问题可以转化为两堆石子,可以从中一堆取,或者从两堆中取同样的数目。具体可以百度一下,套个公式就可以了,注意n和m要减1。

 //#pragma comment(linker, "/STACK:102400000, 102400000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
typedef pair <int, int> P;
const int N = 1e5 + ; void king(int n, int m) {
if((n * m) % )
printf("G\n");
else
printf("B\n");
} void rook(int n, int m) {
if(n == m)
printf("G\n");
else
printf("B\n");
} void knight(int n, int m) {
if(n < m)
swap(n , m);
if(n == m && (n - ) % == )
printf("G\n");
else if(n - m == && n % == )
printf("B\n");
else
printf("D\n");
} void queen(int n, int m) {
n-- , m--;
double x = ( + sqrt(5.0))/2.0;
if(n < m)
swap(n , m);
if(m == int((n - m)*x))
printf("G\n");
else
printf("B\n");
} int main()
{
int t , n , m , c;
scanf("%d" , &t);
while(t--) {
scanf("%d %d %d" , &c , &n , &m);
if(c == ) {
king(n , m);
}
else if(c == ) {
rook(n , m);
}
else if(c == ) {
knight(n , m);
}
else {
queen(n , m);
}
}
return ;
}

HDU 5754 Life Winner Bo (找规律and博弈)的更多相关文章

  1. HDU 5754 Life Winner Bo (博弈)

    Life Winner Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 Description Bo is a "Life W ...

  2. 【博弈论】HDU 5754 Life Winner Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 题目大意: 4种棋子,象棋中的 1王,2车,3马,4后,选其一,B和G轮流走,不能往左上走,一 ...

  3. HDU 5754 Life Winner Bo 组合博弈

    Life Winner Bo Problem Description   Bo is a "Life Winner".He likes playing chessboard gam ...

  4. HDU 5754 Life Winner Bo(各类博弈大杂合)

    http://acm.hdu.edu.cn/showproblem.php?pid=5754 题意: 给一个国际象棋的棋盘,起点为(1,1),终点为(n,m),现在每个棋子只能往右下方走,并且有4种不 ...

  5. HDU 5754 Life Winner Bo (各种博弈) 2016杭电多校联合第三场

    题目:传送门 题意:一个国际象棋棋盘,有四种棋子,从(n,m)走到(1,1),走到(1,1)的人赢,先手赢输出B,后手赢输出G,平局输出D. 题解:先把从(n,m)走到(1,1)看做是从(1,1)走到 ...

  6. HDU 5754 Life Winner Bo

    四种棋子实质上都是一样的思路: 如果某位置的棋子,它下一步可以走到的位置中 能找到有后手胜的位置,那么该位置先手必胜. 如果某位置的棋子,它下一步可以走到的位置中 全是先手胜,那么该位置后手必胜. 其 ...

  7. hdu 5754 Life Winner Bo 博弈论

    对于king:我是套了一个表. 如果起点是P的话,则是后手赢,否则前手赢. 车:也是画图推出来的. 马:也是推出来的,情况如图咯. 对于后:比赛时竟然推错了.QAQ最后看了题解:是个威佐夫博奕.(2, ...

  8. HDU 3032 multi-sg 打表找规律

    普通NIM规则加上一条可以分解为两堆,标准的Multi-SG游戏 一般Multi-SG就是根据拓扑图计算SG函数,这题打表后还能发现规律 sg(1)=1 sg(2)=2 sg(3)=mex{0,1,2 ...

  9. hdu 1030 Delta-wave(数学题+找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1030 Delta-wave Time Limit: 2000/1000 MS (Java/Others ...

随机推荐

  1. Codeforces Beta Round #9 (Div. 2 Only)D

    短小精悍的代码 dp[i][j] +=dp[k][j-1]*[i-k-1][j-1] i个结点 J层 #include <iostream> #include<cstdio> ...

  2. 函数xdes_set_bit

    /**********************************************************************//** Sets a descriptor bit of ...

  3. bzoj4154

    一开始读错题,各种不会做,后来发现染色只是染孩子…… 那不就简单了吗……注意这题是允许离线的 染色如果没有距离限制,它就是个dfs序 距离限制怎么做呢?我们考虑扩展一维变成二维的问题,将每个点变为二维 ...

  4. Linux shell下批量创建缩略图

    一.背景 今天,突然发现手机客户端上的最新新闻缩略图都不显示了,上服务器上看了看, 发现新的新闻图片根本没有生成缩略图. 这套新闻发布系统是很老的程序了,查了一下,问题的原因是不支持png格式的图片, ...

  5. 极光推送使用实例(二) Android客户端

    上一篇简单介绍了极光推送在Java服务端的实现,如果感兴趣的可以看一下极光推送使用实例(一)JAVA服务端.这篇文章介绍下极光推送在Android客户端的实现. JPush Android SDK 是 ...

  6. Raphael绘制圆圈环绕方法

    $scope.toRadians = function (degrees) { return degrees * (Math.PI / 180); } $scope.toDegrees = funct ...

  7. UVA 1151 Buy or Build (MST最小生成树,kruscal,变形)

    题意: 要使n个点之间能够互通,要使两点直接互通需要耗费它们之间的欧几里得距离的平方大小的花费,这说明每两个点都可以使其互通.接着有q个套餐可以选,一旦选了这些套餐,他们所包含的点自动就连起来了,所需 ...

  8. C++实现String

    # include <iostream> # include <memory> # include <cstring> using namespace std; c ...

  9. CImage 获取图片RGB 、图片高和宽;

    1 CImage img , img1 ,imDest; 2 img1.Load( 图片路径); 3 img.Load( 图片路径); 4 为了防止图片失真,先处理一下在把图片显示出来 5 SetSt ...

  10. Windows Sockets Error Codes

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx Most Windows Sockets ...