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 ...
随机推荐
- Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)
Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...
- 坑爹的 Hardware Reserved Memory (查看内存等)
来源: http://blog.sina.com.cn/s/blog_772645ff0100s4t7.html 我的电脑是GatewayNV49C83c,酷睿i3的CPU和NV的独立显卡 Inter ...
- C#中值类型与引用类型通俗理解
关于值类型和引用类型已经有很多人写了很多文章,但是很多人也只是停留在字面上的理解,如果采用一种通俗的方法来解释,想必很多人都会理解.我们都知道值类型存储在栈上,引用类型存储在堆上,引用类型都是xxx类 ...
- Arpa's weak amphitheater and Mehrdad's valuable Hoses
Arpa's weak amphitheater and Mehrdad's valuable Hoses time limit per test 1 second memory limit per ...
- pythonRedis 订阅功能实现
两天机器做,host要写订阅主机的ip,客户端发消息,服务端订阅消息 cat redis_connector.py #!/usr/bin/env python__author__ = 'Q.Li'im ...
- HDU2639[背包第K大]
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=2639] 题意:求第k大背包. 题解:利用二路归并的思想,求解第K大的值. #include<bi ...
- Linux常用操作
1. Latex参考文献格式 http://blog.163.com/sunkun_hust/blog/static/204454119201482524222283/
- 转:LoadRunner响应时间与用户体验时间不一致问题的深入分析
在新一代一期项目非功能测试过程中,我们发现了LoadRunner测试响应时间与客户端实际用户体验时间不一致的现象.例如员工渠道上线后,客户体验时间远远超过了LoadRunner测试响应时间.本文针对这 ...
- VLAN学习
IEEE于1999年颁布了标准化VLAN实现方案的 IEEE 802.1Q 协议标准草案,对带有VLAN标识的报文结构进行了统一规定. 传统的以太网数据帧在目的MAC和源MAC地址之后封装的是上层协议 ...
- ActiveMQ in Action(3) - Persistence
关键字: activemq 2.3 Persistence2.3.1 AMQ Message Store AMQ Message Store是ActiveMQ5.0缺省的持久化存储.Messag ...