这个题除了皇后的可以套用一下威佐夫博弈以外其他的都可以找规律找出来,主要为了学习一下威佐夫博弈,
威佐夫博弈:给两堆石子,每次都可以从其中一堆石子中取n个石子或者从两堆石子中都取n个石子,最后将石子取完的获胜。
解是根据:

           int k = abs(n - m);n = (int)((double)k * (1.0 + sqrt(5.0)) / 2.0);if (n == m) printf("G\n");else printf("B\n");

来判断谁获胜的,但是这个题可能是因为精度问题,用这个直接判断AC不了。=.=

也可以根据规律来打个威佐夫博弈的表

int x = 1, y = 1;for(int i = 1; ; ++i) {int add = 1;while(vis[x + add] || vis[y + 1 + add]) add++;x += add, y += add + 1;if(x >= maxn || y >= maxn) break;vis[x] = vis[y] = true;matc[x][y] = true;matc[y][x] = true;}

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <queue>
using namespace std;const int eps = 1e-6;
const int maxn = 1200 + 50;int s[maxn][maxn];
int T;
int n,m;int knight(int x,int y) {if(x == y && (x - 1) % 3 == 0) return 0;else if((x + 1 == y + 2) && (x % 3 == 0)) return 1;else if((y + 1 == x + 2) && (y % 3 == 0)) return 1;return -1;
}bool matc[maxn][maxn];
bool vis[maxn];int main() {int x = 1, y = 1;for(int i = 1; ; ++i) {int add = 1;while(vis[x + add] || vis[y + 1 + add]) add++;x += add, y += add + 1;if(x >= maxn || y >= maxn) break;vis[x] = vis[y] = true;matc[x][y] = true;matc[y][x] = true;}scanf("%d",&T);while(T--) {int t;scanf("%d%d%d",&t,&n,&m);if (t == 4) {if (matc[n][m]) printf("G\n");else printf("B\n");//            int k = abs(n - m);
//            n = (int)((double)k * (1.0 + sqrt(5.0)) / 2.0);
//            if (n == m) printf("G\n");
//            else printf("B\n");} else if (t == 2) {if (n == m) printf("G\n");else printf("B\n");} else if (t == 1) {if ((n & 1) && (m & 1)) printf("G\n");else printf("B\n");} else {int t = knight(n, m);if (t == -1) printf("D\n");else if (t == 1) printf("B\n");else printf("G\n");}}return 0;
}

HDU 5754 博弈(威佐夫博弈)相关推荐

  1. 博弈——威佐夫博弈(hdu1527,2177)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1527 题目描述: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不 ...

  2. 博弈基础与例题分析(巴什博弈威佐夫博弈尼姆博奕 斐波那契博弈SG博弈)

    文章目录 巴什博弈Bash Game 威佐夫博弈Wythoff Game 尼姆博奕 斐波那契博弈:算法如其名 SG博弈 图 mex(minimal excludant)运算 获得sg表 应用 A Br ...

  3. 巴什博弈+威佐夫博弈

    1.巴什博弈(Bash Game) 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个. 最后取光者胜 若n%(m+1)==0,后手必胜,反之,先手必胜. 最后取光着输 当( ...

  4. 数学基础(四)博弈论(巴什博弈~威佐夫博弈(黄金分割率)~尼姆博奕~斐波那契博弈~SG函数模板)

    一.巴什博弈 1.问题模型 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜. 2.解决思路: 当n=m+1时,由于一次最多只能取m个,所以无论先取者拿走多 ...

  5. 博弈论入门之威佐夫博弈

    威佐夫博弈 威佐夫博弈是一类经典的博弈问题 有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得胜利 博弈分析 ...

  6. 【2016ACM/ICPC亚洲区大连站C】HDU - 5973 Game of Taking Stones 威佐夫博弈

    题意 给你两个石堆的石头数量,两个人轮流拿,两人轮流从任意一堆取至少一个或者从两堆取同样多的物品.问你先手获胜还是后手胜. http://acm.hdu.edu.cn/showproblem.php? ...

  7. hdu 2177 威佐夫博弈

    题目链接:hdu 2177 威佐夫博弈水题,如果不是奇异局势需要输出走完第一步石堆的状态,先按两堆取相同石子,再按只取一堆. 可以打表解决 #include<iostream> #incl ...

  8. HDU - 1527 取石子游戏(威佐夫博弈)

    题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...

  9. 【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)

    题干: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者 ...

最新文章

  1. 开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试
  2. 我是如何去了解需求的
  3. eclipse的tomcat插件使用下载(转)
  4. Java 必看的 Spring 知识汇总!
  5. Redis:常见的面试题
  6. javaweb登录系统账号密码验证等
  7. PHP基于数组的分页函数(核心函数array_slice())
  8. 注释和特殊字符(HTML)
  9. Python装饰器之一
  10. 敏捷开发之极限编程过程
  11. 快速获得Google Chrome最新版本
  12. tif软件Android版下载,TIF文件查看器
  13. 开学至此时总结。(月末总结好像一直没写)
  14. 【Rustdesk】最友好的开源远程桌面软件——Rustdesk 实现 Windows、Linux、MacOS 之间远程连接桌面
  15. 超级好用的在线绘图工具
  16. php imap 安装_PHP安装IMAP扩展
  17. 计算机教师帮扶记录,教师结对帮扶工作总结范文(通用6篇)
  18. 通过xshell命令方式下载文件
  19. 更新 macOS Ventura ssh堡垒机报错:no matching host key type found. Their offer: ssh-rsa,ssh-dss
  20. NGUI动态字体的制作

热门文章

  1. 【附源码】计算机毕业设计JAVA智能快递分拣系统
  2. mq是消息服务器,MQ命令
  3. G120变频器控制方式(宏7)_PROFINET通信控制的具体方法
  4. KUKA机器人程序运行方式总结
  5. 气传导耳机是什么意思?气传导耳机原理是什么?
  6. [高项]管理干系人参与VS控制干系人参与
  7. 安徽计算机二级vfp成绩,安徽省计算机二级vfp08年6月.doc
  8. 2020 年最具潜力的 44 个顶级开源项目
  9. 交互设计中的一些原则
  10. PGXC GaussDB