博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5754 Life Winner Bo 博弈论
阅读量:6353 次
发布时间:2019-06-23

本文共 3376 字,大约阅读时间需要 11 分钟。

Life Winner Bo

题目连接:

Description

Bo is a "Life Winner".He likes playing chessboard games with his girlfriend G.

The size of the chessboard is N×M.The top left corner is numbered(1,1) and the lower right corner is numberd (N,M).

For each game,Bo and G take turns moving a chesspiece(Bo first).At first,the chesspiece is located at (1,1).And the winner is the person who first moves the chesspiece to (N,M).At one point,if the chess can't be moved and it isn't located at (N,M),they end in a draw.

In general,the chesspiece can only be moved right or down.Formally,suppose it is located at (x,y),it can be moved to the next point (x′,y′) only if x′≥x and y′≥y.Also it can't be moved to the outside of chessboard.

Besides,There are four kinds of chess(They have movement rules respectively).

1.king.

2.rook(castle).

3.knight.

4.queen.

(The movement rule is as same as the chess.)

For each type of chess,you should find out that who will win the game if they both play in an optimal strategy.

Print the winner's name("B" or "G") or "D" if nobody wins the game.

Input

In the first line,there is a number T as a case number.

In the next T lines,there are three numbers type,N and M.

"type" means the kind of the chess.

T≤1000,2≤N,M≤1000,1≤type≤4

Output

For each question,print the answer.

Sample Input

4

1 5 5
2 5 5
3 5 5
4 5 5

Sample Output

G

G
D
B

Hint

题意

给你个棋盘,一开始棋子在(1,1)位置,两个人开始玩,只能往右下方向走

谁先走到(n,m)就算胜利,棋子走不到,就算平局。

一共棋子有四种:车,马,国王,皇后

走棋规则是按照国际象棋走法走的。

题解:

国王我没想清楚,我就暴力sg打表的。

车的话,就相当于有两堆石头,一堆n-1个石子,一堆m-1个石子,然后可以拿任意堆任意个。是一个标准的nim博弈

皇后的话,和车一样考虑,就是可以拿任意堆任意个,或者拿两堆同时拿任意个,是一个标准的威佐夫博弈。

马就比较烦的,他到终点的步数是唯一确定的,所以只用判断奇数偶数就好了。但是比较烦的是,如果这个人觉得他会输,他就会使得这局比赛走向平局,就走到一个不可能走到终点到位置。

这个我们手玩了一下,发现只要不在对角线位置的点,输家就可以使得比赛走向平局。(就是abs(n-m)>1的时候,一定是平局)

代码

#include 
using namespace std;int dp[1010][1010];int main(){ memset(dp,-1,sizeof(dp)); dp[1][1]=0; for(int i=1;i<=1000;i++) { for(int j=1;j<=1000;j++) { int a=dp[i][j-1],b=dp[i-1][j],c=dp[i-1][j-1]; if(a!=0&&b!=0&&c!=0) { dp[i][j]=0; continue; } if(a!=1&&b!=1&&c!=1) { dp[i][j]=1; continue; } if(a!=2&&b!=2&&c!=2) { dp[i][j]=2; continue; } dp[i][j]=3; } } int T; scanf("%d",&T); while(T--) { int n,m,type; scanf("%d%d%d",&type,&n,&m); if(type==1) { if(dp[n][m]) printf("B\n");else printf("G\n"); } if(type==2) { int x=n-1,y=m-1; int z=x^y; if(z) printf("B\n");else printf("G\n"); } if(type==3) { if(n>m) swap(n,m); int x=n-1,y=m-1; if((x*2
=n) printf("D\n");else printf("B\n"); } else { if(z+z/2>=n) printf("D\n");else printf("G\n"); } } } if(type==4) { int a=n-1,b=m-1,t,d; if ( a > b ) { t = a; a = b; b = t; } d = b - a; t = floor( d * ( sqrt(5.0) + 1 ) / 2 ); printf( (t == a) ? "G\n" : "B\n" ); } } return 0;}

转载地址:http://vogla.baihongyu.com/

你可能感兴趣的文章
《淘宝店铺设计装修一册通》一2.5 抠图工具的简单运用
查看>>
《音乐达人秀:Adobe Audition实战200例》——实例4 收音机音乐节目转录到电脑里...
查看>>
《JavaScript应用程序设计》一一3.1 过时的类继承
查看>>
Amazon 推出 API 网关使用计划
查看>>
互联网流量超出路由器上限 或致全球断网
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.5 限制图层列表
查看>>
GNOME 地图 3.20 加入更多新特性 可用性得到加强
查看>>
《代码整洁之道:程序员的职业素养》导读
查看>>
《计算复杂性:现代方法》——习题
查看>>
Mozilla 释出更新修复中间人攻击漏洞
查看>>
思科表态反对网络中立
查看>>
《HTML5+CSS3网页设计入门必读》——1.5 利用多种Web浏览器执行测试
查看>>
Velocity官方指南-容器
查看>>
国家为何如此重视石墨烯?
查看>>
《Python和Pygame游戏开发指南》——1.14 配套网站上的更多信息
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>