多校hdu5754(博弈)
©此题中在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;
}
多校hdu5754(博弈)的更多相关文章
- HDU 4678 Mine (2013多校8 1003题 博弈)
Mine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场
题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...
- HDU 5754 Life Winner Bo (各种博弈) 2016杭电多校联合第三场
题目:传送门 题意:一个国际象棋棋盘,有四种棋子,从(n,m)走到(1,1),走到(1,1)的人赢,先手赢输出B,后手赢输出G,平局输出D. 题解:先把从(n,m)走到(1,1)看做是从(1,1)走到 ...
- HDU 4642 Fliping game (2013多校4 1011 简单博弈)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 2017年上海金马五校程序设计竞赛:Problem G : One for You (博弈)
Description Given a m × n chessboard, a stone is put on the top-left corner (1, 1). Kevin and Bob ta ...
- hdu-5754 Life Winner Bo(博弈)
题目链接: Life Winner Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- 2019年杭电多校第三场 1008题Game(HDU6610+带修改莫队+Nim博弈)
题目链接 传送门 题意 给你\(n\)堆石子,每堆有\(a_i\)堆石子,\(q\)次操作: 在\([L,R]\)内有多少个子区间使得\(Alice\)(先手)在\(Nim\)博弈中获胜: 交换\(a ...
- hdu多校第七场 1006(hdu6651) Final Exam 博弈
题意: 有n道题,这n道题共m分,要求你至少做出k道才能及格,你可以自由安排复习时间,但是只有某道题复习时间严格大于题目分配的分值时这道题才能够被做出来,求最少的,能够保证及格的复习时间.复习时间和分 ...
- Solution -「多校联训」博弈
\(\mathcal{Description}\) Link. A B 两人在树上博弈,初始时有一枚棋子在结点 \(1\).由 A 先操作,两人轮流移动沿树上路径棋子,且满足本次移动的树上距离 ...
随机推荐
- modelform 对象和model之间的关系
一.modelform的每一个标签对象 for bound_field in form: print('form.model',form.Meta.model) ...
- python静态网页爬虫之xpath
常用语句: 1.starts-with(@属性名称,属性字符相同部分)使用情形: 以相同的字符开头 <div id = 'test-1'>需要的内容1</div> <di ...
- 面试题:Spring的理解
答案:D AOP为Aspect Oriented Programming的缩写, 意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续,是软件开发 ...
- CodeIgniter框架——访问方式 URI 分配变量 数据库操作
1.访问方式: CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表) eg:localhost/index.php/welcome/index/id 第一 ...
- StartCom免费ssl证书申请以及在Tomcat环境中的配置
提示:建议以下操作不使用谷歌浏览器(该网站的证书不识别...),可以看到我的截图中谷歌换成了ie(没装火狐)...建议该申请使用火狐 前面介绍了下自签名的ssl证书,虽然可以实现https协议访问,但 ...
- influxDB---数据库操作SQL
查询 查询不能只查tag标签,一定要加上fields. 如:select val,"班组" FROM "测试表" WHERE dev = 'cs123' and ...
- 关于Springboot中dubbo整合注意的误区(不对之处请指出)
这是我的客户端配置! 这是生产的配置, 首先注意一下 scan 我之前尝试这样的客户端配置 然后 果断客户端不能注册接口 @Reference(version="1.0") ...
- 利用Hibernate注解生成表
转自:http://blog.csdn.net/madison__/article/details/55677099 Hibernate4注释 @Entity(name = "tbl_use ...
- win8内置管理员账号既能使用metro应用又能使用默认共享
一.内置管理员账号打开METRO应用 1.按WIN+R 弹出运行框. 2.输入gpedit.msc点确定,打开本地组策略编辑器. 3.逐级选择“计算机配置”,“Windows 设置”,“安全设置”,“ ...
- 002-JVM运行时数据区【内存模型】
一.概述 JVM定义了不同运行时数据区,他们是用来执行应用程序的.某些区域随着JVM启动及销毁,另外一些区域的数据是线程性独立的,随着线程创建和销毁. 1.1.jvm自身物理结构 1.2.java内存 ...