HDU 5754 Life Winner Bo
四种棋子实质上都是一样的思路:
如果某位置的棋子,它下一步可以走到的位置中 能找到有后手胜的位置,那么该位置先手必胜。
如果某位置的棋子,它下一步可以走到的位置中 全是先手胜,那么该位置后手必胜。
其余三种都用如上思路打表即可,但要注意马的情况(因为马可能有些位置走不到终点):
如果该位置走过去的两个位置都是平局的,那么该位置也是平局。
如果该位置走过去的两个位置都是先手胜,那么该位置后手胜。
如果该位置走过去的两个位置中有至少一个位置是后手胜,那么该位置先手胜。
其余情况,均为平局。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
inline int read()
{
char c = getchar(); while(!isdigit(c)) c = getchar();
int x = ;
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} const int maxn=;
int king[maxn][maxn],rook[maxn][maxn],knight[maxn][maxn],queen[maxn][maxn];
bool r[maxn],c[maxn],x[*maxn]; int check(int a,int b)
{
if(a<=||a>) return -;
if(b<=||b>) return -;
return knight[a][b];
} void init()
{
memset(king,-,sizeof king);
memset(rook,-,sizeof rook);
memset(knight,-,sizeof knight);
memset(queen,-,sizeof queen); king[][]=;
for(int i=;i<=;i++) king[][i]=king[i][]=king[i-][]^;
for(int i=;i<=;i++) for(int j=;j<=;j++)
if(king[i][j-]==||king[i-][j]==||king[i-][j-]==) king[i][j]=; else king[i][j]=; memset(r,,sizeof r); memset(c,,sizeof c);
rook[][]=; r[]=; c[]=;
for(int i=;i<=;i++) rook[i][]=rook[][i]=;
for(int i=;i<=;i++) for(int j=;j<=;j++)
if(r[i]==||c[j]==) rook[i][j]=; else rook[i][j]=, r[i]=, c[j]=; knight[][]=;
for(int i=;i<=;i++) for(int j=;j<=;j++)
{
if(check(i-,j-)==-&&check(i-,j-)==-) continue;
if(check(i-,j-)==&&check(i-,j-)==) {knight[i][j]=; continue;}
if(check(i-,j-)==||check(i-,j-)==) {knight[i][j]=; continue;}
else continue;
} memset(r,,sizeof r); memset(c,,sizeof c); memset(x,,sizeof x);
queen[][]=; r[]=; c[]=; x[]=;
for(int i=;i<=;i++) queen[i][]=queen[][i]=;
for(int i=;i<=;i++) for(int j=;j<=;j++) {
int num; if(i-min(i-,j-)==) num=j-min(i-,j-); else num=+i-min(i-,j-);
if(r[i]==||c[j]==||x[num]==) queen[i][j]=; else queen[i][j]=, r[i]=, c[j]=, x[num]=;
}
} int main()
{
init(); int T; scanf("%d",&T);
while(T--)
{
int n,m,type,ans; scanf("%d%d%d",&type,&n,&m);
if(type==) ans=king[n][m]; if(type==) ans=rook[n][m];
if(type==) ans=knight[n][m]; if(type==) ans=queen[n][m];
if(ans==) printf("G"); else if(ans==) printf("B"); else printf("D");
printf("\n");
}
return ;
}
HDU 5754 Life Winner Bo的更多相关文章
- HDU 5754 Life Winner Bo (博弈)
Life Winner Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 Description Bo is a "Life W ...
- HDU 5754 Life Winner Bo 组合博弈
Life Winner Bo Problem Description Bo is a "Life Winner".He likes playing chessboard gam ...
- HDU 5754 Life Winner Bo (找规律and博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5754 给你四种棋子,棋子一开始在(1,1)点,两个人B和G轮流按每种棋子的规则挪动棋子,棋子只能往右下 ...
- 【博弈论】HDU 5754 Life Winner Bo
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 题目大意: 4种棋子,象棋中的 1王,2车,3马,4后,选其一,B和G轮流走,不能往左上走,一 ...
- HDU 5754 Life Winner Bo(各类博弈大杂合)
http://acm.hdu.edu.cn/showproblem.php?pid=5754 题意: 给一个国际象棋的棋盘,起点为(1,1),终点为(n,m),现在每个棋子只能往右下方走,并且有4种不 ...
- HDU 5754 Life Winner Bo (各种博弈) 2016杭电多校联合第三场
题目:传送门 题意:一个国际象棋棋盘,有四种棋子,从(n,m)走到(1,1),走到(1,1)的人赢,先手赢输出B,后手赢输出G,平局输出D. 题解:先把从(n,m)走到(1,1)看做是从(1,1)走到 ...
- hdu 5754 Life Winner Bo 博弈论
对于king:我是套了一个表. 如果起点是P的话,则是后手赢,否则前手赢. 车:也是画图推出来的. 马:也是推出来的,情况如图咯. 对于后:比赛时竟然推错了.QAQ最后看了题解:是个威佐夫博奕.(2, ...
- HDU 5754Life Winner Bo
Life Winner Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 5754Life Winner Bo
给定一个n*m的矩阵,有四种棋子(国际象棋的王,王后,骑士,车).起点在(1,1)先走到(n,m)获胜. 分析:车是nim博弈.王后是威佐夫博弈.王和骑士写两个1000*1000的预处理即可. hdu ...
随机推荐
- HTML canvas图像裁剪
canvas drawImage方法的图像裁剪理解可能会比较耗时,记录一下,以便供人翻阅! context.drawImage(img,sx,sy,swidth,sheight,x,y,width,h ...
- loadrunner破解方法--lm70.dll,mlr5lprg.dll下载地址
一.由于在压力测试执行中,出现一个-10803的错误 ,为解决这个错误,重新设置的环境变量,在次执行错误,这个问题解决了,但另外一个问题出来了,LR,打开脚本编辑器老提示找不到TEMP目录,当时没有想 ...
- Hibernate3 第一天
Hibernate3 第一天 课程安排:4天(框架的使用+理论知识) 第一天Hibernate快速入门(单表的CRUD)+核心api讲解(配置+接口) 第二天:Hibernate一级缓存,快照,对象持 ...
- 2016中国大数据技术大会( BDTC ) 共商大数据时代发展之计
中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(HadoopinChina,HiC).从2008年仅60余人参加的技术沙龙发展到当下数千人的技术盛宴,目前已成为国内最具影响力.规模最 ...
- Java 1.0 类与对象
1.Java中main()的作用: a.测试真正的类 b.启动Java应用程序 2. Java程序只会让对象与对象交互 3.创建对象时存储在堆中,自动回收. 4.Java无全局变量 5.Java程序由 ...
- POJ 3268 Silver Cow Party(dij+邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...
- 浙大 pat 1047题解
1047. Student List for Course (25) 时间限制 400 ms 内存限制 64000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- 12.hibernate命名查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- 关于string的对象引用
什么都不说了, 一切都在代码里: Console.WriteLine(object.ReferenceEquals(c5, c4)); //False ...
- ubuntu安装docker
uname -r #查看内核版本要大于3.10apt-get updateapt-get install linux-image-generic-lts-trusty wget -qO- https: ...