勇者游戏(巴什博弈)- HDU 1846
博弈算法中比较经典的一个博弈问题是巴什博奕,巴什博弈是这样的:
有一堆物品,数量为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相关推荐
- Nim游戏 —— 巴什博弈
巴什博弈 对于这道题来说,如果我们拿到n为(3+1)*x,那么这局败,否则胜(x为大于零的整数) 解释:对于拿到(3+1)*x的一方来说,无论取1.2.3,对方都可以把控制石子数使己方拿到(3+1)* ...
- hdu 1846 Brave Game 勇敢者的游戏 DP/巴什博弈
动态规划/简单博弈 Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 题解报告:hdu 1846 Brave Game(巴什博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1846 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片, ...
- (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1846 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人: (2) 道具:23张扑克牌: (3) 规 ...
- HDU 1846 Brave Game(巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 巴什博弈例题:NYOJ23;HDU:2149,1847,2897,2188
巴什博弈: 只有一堆n个物品,两个人轮流从这堆物品中取除,每次取的个数为[1,m](至少去一个,最多取m个),最后取完者获胜 特征: 物品只有一堆,简单变形: 要么在范围内不规定个数,要么规定只能取几 ...
- hdu 2149 巴什博弈
http://acm.hdu.edu.cn/showproblem.php?pid=2149 分析:就是巴什博弈的概念. 题目要求:对于每组数据,在一行里按递增的顺序输出Lele第一次可以加的价.两个 ...
- 杭电acm 1846 Brave Game(巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768 ...
- hdu 2188巴什博弈
http://acm.hdu.edu.cn/showproblem.php?pid=2188 分析:巴什博弈. View Code // I'm lanjiangzhou //C #include & ...
最新文章
- for死循环、怪异字符串、两次return……Python冷知识(三)
- Java基础、多线程、JVM、集合八股文自述(持续更新)
- Nhibernate常见的错误
- clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝
- hourglassnet笔记
- ios 静态方法是否能被重写_小米新系统亮相,比苹果iOS更干净,21款手机支持升级...
- Java8 Optional类
- 配置SQL Server AlwaysOn高可用性组
- 最流行的轻量级php框架,GitHub - meolu/zan: zan 轻量级PHP微框架
- 还原数据库时不能独占访问
- XP系统无法远程桌面
- U8服务器怎么修改会计制度,用友GRP-U8乡镇财政精细化管理新会计制度操作手册..doc...
- 浅析分支定界法在SLAM技术中的应用
- 数字图像处理(1): 数字图像处理领域应用——电磁波谱 可见光
- U盘文件丢失了怎么办?一串英文字符即可快速帮你找回,秒学!
- python c++情侣网名含义_python的对象与名字绑定(转贴,此文甚好)
- iOS音频开发(录音+播放+剪辑+合成+压缩转码)
- jQuery实现点击链接显示和隐藏二维码
- Mac系统给移动硬盘分区(图文)
- PG12/GP7操作符+的实现