©此题中在N×M的棋盘中从(1,1)走到(N,M)B先走G后走,谁先到(N,M)谁赢,走法分为4中分别是国际象棋中的国王,车,马,王后的发,在四种走法下谁能赢;

我们依次分析每一种棋子。

①王。

首先注意一个3*3的棋盘,开始在(1,1),问走到(3,3)谁有必胜策略。

穷举所有情况,容易发现这是后手赢。

对于NN和MM更大的情况,我们把横坐标每隔3、纵坐标每隔3的点都画出来,这些点都是符合后手胜的。 
(因为无论先手怎么移动,后手都能重新移动到这些格子,直到到了终点)

如果初始点不在这些点上,就必然是先手胜。因为先手可以立刻移动到上述的点。

②车。

注意到,如果目前的位置距离终点的xx和yy坐标差相等,一定是后手胜。 
(因为先手只能向下或者向右走一段路;无论他往哪里走,后手往另一维走相同的步数,依然保持这一样一种状态。)

反之,先手必然能走到一处相等的位置,转化为上述问题,所以一定是先手胜。

③马。

  因为只能向右下走所以有两种走法,左1右2,和左2右1;棋盘内有的是可以到达且到达的步数是不变的,分别设走1的k1步,第2种走法的为k2步;可以有方程k1*1+k2*2=m,k1*2+k2*1=n;联立求解,若k1,k2为正整数则能分出胜负;

根据奇偶求胜负。但是还有一点要注意,因为谁都不想输所以要输的人尽量走成平局,这种情况需判断k1与k2间之差大于等于2;大于2就是平局,不难推出。

④皇后。

  仔细观察可发现这是一个威佐夫博弈,可利用n,m之差乘以1.618完美比例与m,n中最小的值进行比较若想等则后手赢。

以下是代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include<algorithm>
#define LL long long
#define d (sqrt(5)+1)/2 //黄金比例
using namespace std;
int main()
{
int t,type,n,m;
cin>>t;
while(t--)
{
scanf("%d%d%d",&type,&n,&m);
if(m>1000||n>1000||n<2||m<2)
continue;
n--,m--;
if(type==1)
{
if(n%2==0&&m%2==0)
printf("G\n");
else
printf("B\n");
}
if(type==2)
{
if(n==m)
{
printf("G\n");
}
else
printf("B\n");
}
if(type==3)
{
if((2*n-m)/3*3==2*n-m&&(2*m-n)/3*3==2*m-n)
{
int k1=(2*n-m)/3;
int k2=(2*m-n)/3;
int k=k2+k1;
if(abs(k1-k2)>1)
{
printf("D\n");
continue ;
}
else if(k%2==0)
{
printf("G\n");
}
else
printf("B\n");
}
else
printf("D\n");
}
if(type==4)
{
if((int)(abs(n-m)*d)==min(n,m)) // 注意 (abs(n-m)*d)一定要转换成int型的否则会出错;
{
printf("G\n");
}
else
printf("B\n");
}
}
return 0;
}

  

最新文章

  1. GUI - GEB UI库
  2. 每天一个 Linux 命令(19):find 命令概览
  3. angularJS--ngSelect
  4. SQLserver的存储过程
  5. IOS调用相机和相册时无法显示中文
  6. C# 控制台程序设置字体颜色
  7. iOS开发系列之运动事件
  8. mysql获取当前日期的周一和周日的日期
  9. webpack中tree-shaking技术介绍
  10. CodeChef Little Elephant and Movies [DP 排列]
  11. Python基础之自定义工具类
  12. 【Dubbo源码学习】负载均衡算法(1)-随机算法
  13. ssh登录原理及免密登录方法
  14. react实现tab切换效果
  15. js判断数组中是不是有某个元素
  16. 干货-递归下降分析器 笔记(具体看Python Cookbook, 3rd edition 的2.19章节)
  17. 制作高仿QQ的聊天系统(上)—— 布局文件 &amp; 减少过度绘制
  18. [AX2012]代码更改默认财务维度
  19. redis的常用公共方法(2)
  20. Redis安装——在CentOS7下的安装

热门文章

  1. ios -特殊符号大全分享给大家,直接复制粘贴就可以使用了!
  2. PHP实现自己活了多少岁
  3. 锁(java, DB)
  4. D - Find a way
  5. (七)solr7之Terms组件的使用
  6. 使用 mock 测试
  7. mixin 在传参中可以出现 参数 在类内部可以定义 作用域
  8. Python 网络编程——socket
  9. 人工智能-baidu-aip语音识别(语音转文字)
  10. 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计