博弈算法中比较经典的一个博弈问题是巴什博奕,巴什博弈是这样的:

有一堆物品,数量为n,两个人轮流取,规定每次最多取m个,最少取1个。

我们定义先取者为F(first),后取者为S(second)

网上讲的很多不是很容易理解,我来讲一个非常容易理解的思路。

推理1:显然,如果n=m+1,那么由于一次最多只能取m个,所以无论F拿走多少个,S都能够一次拿走剩余的石子,S取胜。

推理2:再者,如果n=k*(m+1),那么对于每次F拿走数量X,那么S总能拿走数量m+1-X,如此下去,还是S取胜。

结论:若n%(m+1)=0,则先手F必败,否则先手F必胜。

代码很简单了,如果取模为0,则先手必败。

Problem Description

十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。
今天,大家选择上机考试,就是一种勇敢(brave)的选择;这个短学期,我们讲的是博弈(game)专题;所以,大家现在玩的也是“勇敢者的游戏”,这也是我命名这个题目的原因。
当然,除了“勇敢”,我还希望看到“诚信”,无论考试成绩如何,希望看到的都是一个真实的结果,我也相信大家一定能做到的~

各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的:
1、  本游戏是一个二人游戏;
2、  有一堆石子一共有n个;
3、  两人轮流进行;
4、  每走一步可以取走1…m个石子;
5、  最先取光石子的一方为胜;

如果游戏的双方使用的都是最优策略,请输出哪个人能赢。

Input

输入数据首先包含一个正整数C(C<=100),表示有C组测试数据。
每组测试数据占一行,包含两个整数n和m(1<=n,m<=1000),n和m的含义见题目描述。

Output

如果先走的人能赢,请输出“first”,否则请输出“second”,每个实例的输出占一行。

Sample Input

2
23 2
4 3

Sample Output

first
second

源代码:GCC

#include<stdio.h>int main()
{int c, n, m;scanf("%d", &c);while (c--){scanf("%d%d", &n, &m);if (n % (m + 1) == 0) printf("second\n");else printf("first\n");}return 0;
}

个人公众号:ACM算法日常

专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、机器学习等。

勇者游戏(巴什博弈)- HDU 1846相关推荐

  1. Nim游戏 —— 巴什博弈

    巴什博弈 对于这道题来说,如果我们拿到n为(3+1)*x,那么这局败,否则胜(x为大于零的整数) 解释:对于拿到(3+1)*x的一方来说,无论取1.2.3,对方都可以把控制石子数使己方拿到(3+1)* ...

  2. hdu 1846 Brave Game 勇敢者的游戏 DP/巴什博弈

    动态规划/简单博弈 Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. 题解报告:hdu 1846 Brave Game(巴什博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1846 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片, ...

  4. (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1846 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人: (2) 道具:23张扑克牌: (3) 规 ...

  5. HDU 1846 Brave Game(巴什博弈)

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 巴什博弈例题:NYOJ23;HDU:2149,1847,2897,2188

    巴什博弈: 只有一堆n个物品,两个人轮流从这堆物品中取除,每次取的个数为[1,m](至少去一个,最多取m个),最后取完者获胜 特征: 物品只有一堆,简单变形: 要么在范围内不规定个数,要么规定只能取几 ...

  7. hdu 2149 巴什博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=2149 分析:就是巴什博弈的概念. 题目要求:对于每组数据,在一行里按递增的顺序输出Lele第一次可以加的价.两个 ...

  8. 杭电acm 1846 Brave Game(巴什博弈)

    Brave Game                             Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  9. hdu 2188巴什博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=2188 分析:巴什博弈. View Code // I'm lanjiangzhou //C #include & ...

最新文章

  1. for死循环、怪异字符串、两次return……Python冷知识(三)
  2. Java基础、多线程、JVM、集合八股文自述(持续更新)
  3. Nhibernate常见的错误
  4. clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝
  5. hourglassnet笔记
  6. ios 静态方法是否能被重写_小米新系统亮相,比苹果iOS更干净,21款手机支持升级...
  7. Java8 Optional类
  8. 配置SQL Server AlwaysOn高可用性组
  9. 最流行的轻量级php框架,GitHub - meolu/zan: zan 轻量级PHP微框架
  10. 还原数据库时不能独占访问
  11. XP系统无法远程桌面
  12. U8服务器怎么修改会计制度,用友GRP-U8乡镇财政精细化管理新会计制度操作手册..doc...
  13. 浅析分支定界法在SLAM技术中的应用
  14. 数字图像处理(1): 数字图像处理领域应用——电磁波谱 可见光
  15. U盘文件丢失了怎么办?一串英文字符即可快速帮你找回,秒学!
  16. python c++情侣网名含义_python的对象与名字绑定(转贴,此文甚好)
  17. iOS音频开发(录音+播放+剪辑+合成+压缩转码)
  18. jQuery实现点击链接显示和隐藏二维码
  19. Mac系统给移动硬盘分区(图文)
  20. PG12/GP7操作符+的实现

热门文章

  1. QCon北京2013大会图灵全程为您准备好图书
  2. 【机器学习】决策树模型详解
  3. FZU 2207 ——以撒的结合——————【LCA + 记录祖先】
  4. 如何建立一个弩车作为家庭项目
  5. 使用StopWatch计算耗时
  6. 多线程、多进程的区别及适用场景
  7. EXCEL合并单元格快捷键暨WORD+EXCEL自定义快捷键
  8. 物联网应用中的 Wi-Fi 6
  9. 微信小程序 - 仿果库列表
  10. 这6款必备的电脑管理软件,特别最后一款完胜Everything