http://acm.hdu.edu.cn/showproblem.php?pid=5754

题意:

给一个国际象棋的棋盘,起点为(1,1),终点为(n,m),现在每个棋子只能往右下方走,并且有4种不同的棋子,棋子的走法与国际象棋走法一致。问最后谁能取得胜利。

思路:

首先推荐一个博客http://www.matrix67.com/blog/archives/6784,这里面对这问题有很好的讲解。

我还是简单解释一下:

①king:

国王每次只能横、竖、斜走一格,这个很好分析,(x,y)如果连个都是奇数,那肯定是必败状态,否则就是必胜状态。

②rook:

车每次能横、竖走任意格,这个问题的模型其实和拿石子是一样的,是个尼姆博弈,有两堆石子,每次可以选择在任意一堆中拿走任意数量的石子,那么这里车的坐标(x,y)就对应了两堆石子的石子数量。如果x=y,那么先手无论拿多少,另一个人总可以在另一堆石子中拿相同的石子数,这样到最后肯定是先手败,如果x!=y则是先手必胜。

③kight:

骑士的走法是先往一个方向走2格,再往其垂直方向走1格。首先通过方程求解的话可以得出(n+m-2)必须得是3的倍数,否则就是平局。如果n=m,那么先手无论怎么操作,另一个人都可以走相反的方向,这样每轮过后棋子的x,y值始终是相等的,此时先手必败。如果n=m+1,或者m+1,此时先手可以一步使得棋子坐标x,y值相等,这就和上一种情况一样了,此时先手必胜。除此之外的情况都是平局,因为玩家可以乱走,使得最后无法到达终点。

④queen:

皇后能横、竖、斜走任意格,这就相当于有两个石子堆,每次可以在任意一堆中拿走任意的石子数量或者在两个堆中拿走相同数量的石子数。这就是一个明显的威佐夫博弈,直接套用黄金分割定律。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int type,n,m; int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&type,&n,&m);
if(type==)
{
if((n&) && (m&)) puts("G");
else puts("B");
}
else if(type==)
{
if(n==m) puts("G");
else puts("B");
}
else if(type==)
{
if((n+m-)%==)
{
if(n<m) swap(n,m);
if(n==m) puts("G");
else if(n-m==) puts("B");
else puts("D");
}
else puts("D");
}
else
{
if(n==m) puts("B");
else
{
if(n>m) swap(n,m);
n--;m--;
int w=(int)(((sqrt()+)/2.0)*(m-n));
if(w==n) puts("G");
else puts("B");
}
}
}
return ;
}

HDU 5754 Life Winner Bo(各类博弈大杂合)的更多相关文章

  1. HDU 5754 Life Winner Bo (博弈)

    Life Winner Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 Description Bo is a "Life W ...

  2. HDU 5754 Life Winner Bo 组合博弈

    Life Winner Bo Problem Description   Bo is a "Life Winner".He likes playing chessboard gam ...

  3. HDU 5754 Life Winner Bo (各种博弈) 2016杭电多校联合第三场

    题目:传送门 题意:一个国际象棋棋盘,有四种棋子,从(n,m)走到(1,1),走到(1,1)的人赢,先手赢输出B,后手赢输出G,平局输出D. 题解:先把从(n,m)走到(1,1)看做是从(1,1)走到 ...

  4. HDU 5754 Life Winner Bo (找规律and博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5754 给你四种棋子,棋子一开始在(1,1)点,两个人B和G轮流按每种棋子的规则挪动棋子,棋子只能往右下 ...

  5. 【博弈论】HDU 5754 Life Winner Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 题目大意: 4种棋子,象棋中的 1王,2车,3马,4后,选其一,B和G轮流走,不能往左上走,一 ...

  6. HDU 5754 Life Winner Bo

    四种棋子实质上都是一样的思路: 如果某位置的棋子,它下一步可以走到的位置中 能找到有后手胜的位置,那么该位置先手必胜. 如果某位置的棋子,它下一步可以走到的位置中 全是先手胜,那么该位置后手必胜. 其 ...

  7. hdu 5754 Life Winner Bo 博弈论

    对于king:我是套了一个表. 如果起点是P的话,则是后手赢,否则前手赢. 车:也是画图推出来的. 马:也是推出来的,情况如图咯. 对于后:比赛时竟然推错了.QAQ最后看了题解:是个威佐夫博奕.(2, ...

  8. HDU5754 Life Winner Bo(博弈)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5754 Description Bo is a "Life Winner" ...

  9. hdu-5754 Life Winner Bo(博弈)

    题目链接: Life Winner Bo Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/ ...

随机推荐

  1. 转:"为自动填充列调整大小期间不能执行此操作"解决办法 .

    转载自:http://blog.csdn.net/zhxingway/article/details/5384690 今天在测试的时候,打开一个窗口突然发现出现以下错误,就算我在打开窗口那个按钮里面和 ...

  2. 74.Java异常处理机制

    package testDate; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IO ...

  3. 爬虫--cheerio

    const cheerio = require('cheerio') const $ = cheerio.load('<h2 class="title">Hello w ...

  4. spring框架入门之一

    一.什么是Spring框架 1.什么是Spring Spring框架是个一个全栈的框架.意思就是使用Spring的框架可以开发web层,service层还有dao层. 本质:Spring就是一个对象的 ...

  5. redis 缓存锁的实现方法

    1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执 ...

  6. bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

  7. Linux内核Socket参数调优

    可调优的内核变量存在两种主要接口:sysctl命令和/proc文件系统,proc中与进程无关的所有信息都被移植到sysfs中.IPV4协议栈的sysctl参数主要是sysctl.net.core.sy ...

  8. mysql主从(主备)同步一键配置,配自动检测功能

    主从一键shell配置 做个笔记. #!/bin/bash #Mysql sync #chenglee #master机器ip MasterIP="192.168.137.174" ...

  9. JavaScript中数组的排序方法:1.冒泡排序 2.选择排序

      //1.选择排序: //从小到大排序:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列. var arr2=[19, 8, ...

  10. day28 网络编程

    网络编程 什么是网络编程? 编写基于网络的应用程序的过程称之为网络编程 一.CS构架 C/S构架 服务器和客户端之间用网线连接 提供数据的计算机称为服务器,访问数据的计算机称为客户端 二.网络通讯的基 ...