信息学奥赛一本通(1218:取石子游戏)
1218:取石子游戏
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 8837 通过数: 4144
【题目描述】
有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。
比如初始的时候两堆石子的数目是25和7。
25 7 | --> | 11 7 | --> | 4 7 | --> | 4 3 | --> | 1 3 | --> | 1 0 |
选手1取 | 选手2取 | 选手1取 | 选手2取 | 选手1取 |
最后选手1(先取的)获胜,在取的过程中选手2都只有唯一的一种取法。
给定初始时石子的数目,如果两个人都采取最优策略,请问先手能否获胜。
【输入】
输入包含多数数据。每组数据一行,包含两个正整数a和b,表示初始时石子的数目。
输入以两个0表示结束。
【输出】
如果先手胜,输出"win",否则输出"lose"。
【输入样例】
34 12
15 24
0 0
【输出样例】
win
lose
【提示】
假设石子数目为(a,b)且a >= b,如果[a/b] >= 2则先手必胜,如果[a/b]<2,那么先手只有唯一的一种取法。[a/b]表示a除以b取整后的值。
【分析】
这道题应属简单的递归题目,放到深搜中,勉强。设 dfs(int a, int b, int step)函数是求a,b两堆石子,取step次分输赢,递归出口,1)a/b>=2;2)a%b=0,拿完了。递归式:dfs( b, a%b ,step+1)。
【参考代码】
#include <stdio.h>// a为最多石头的石头堆,b为较少石头的石头堆,step为当前的步数
void dfs(int a,int b,int step)
{if(a%b==0 || a/b>=2){ //满足条件:根据题意,当a/b>=2时必分输赢,//a%b==0表示拿完了一堆的石子,分出了输赢if(step%2==1) //如果step是奇数则先手获胜printf("win\n");else //否则先手失败printf("lose\n");return;}dfs(b,a%b,step+1);//这里将最多的石头堆保持在a堆,//a%b相当于a堆被拿掉b堆的整数倍个石子后剩余的数量,//将这个值给b堆,保持下一次a堆还是最大的
}int main()
{int n,m,t;while(scanf("%d%d",&n,&m) && n||m){if(n<m) //将最多石头的石头堆放在n堆{t=n;n=m;m=t;}dfs(n,m,1);}return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1218
信息学奥赛一本通(1218:取石子游戏)相关推荐
- 信息学奥赛一本通 1218:取石子游戏 | OpenJudge NOI 2.5 6266:取石子游戏
[题目链接] ybt 1218:取石子游戏 OpenJudge NOI 2.5 6266:取石子游戏 [题目考点] 1. 博弈:完全信息博弈 博弈树: 博弈树的结点对应于某一个棋局,其分支表示走一步棋 ...
- 信息学奥赛一本通网站1672:游戏通关
如果你正在找这道题不超时(或者和自己的AC算法不一样)的算法,并且恰好像本蒟蒻一样会树状数组不会线段树,继续往下看 网址:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 这道题的贪心 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通超详细题解,动画图文题解
内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...
- 1218:取石子游戏
1218:取石子游戏时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4462 通过数: 2049 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取, ...
- 博弈论——1218:取石子游戏
1218:取石子游戏时间限制: 1000 ms 内存限制: 65536 KB 提交数: 10430 通过数: 4939 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂
信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂 https://blog.csdn.net/mrcrack/article/details/82846727 快速幂取模算法如何实现? h ...
- 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)
信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...
最新文章
- android 拖动的view,Android实现随意拖动View效果
- IOS开发笔记10-Object-C中的对象
- Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
- 【做题记录】区间排序—线段树
- 英语学习过程中的几点体会(1)
- [UE4]性能优化指南(程序向)
- python爬虫隐藏ip_Python3网络爬虫之使用User Agent和代理IP隐藏身份
- 将一个包含汉字的字符串逐个转化为数字,并得出该字符串的十进制和
- erp生产管理系统排名_仁和ERP软件企业管理系统如何提高生产管理
- Promise的deferred对象详解
- apache自定义虚拟主机日志格式
- anaconda查看删除增加镜像源
- linux是用于汇编语言,深入理解程序设计:使用Linux汇编语言
- vue v-model计算器案例
- 【排列组合】ZSC1076: 数学、不容易系列之三——考新郎
- 深入理解HashMap
- 【程序人生】回忆职业生涯(一)选择职业时的“图样图森破”
- C语言估算数学常量e,数学常数e
- 多目标优化常见分解方法
- HTML(二)在网页中插入表格
热门文章
- armadillo 库加入项目中程序卡死不运行的问题
- 怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins
- 阿里动物园新成员来了,10本书带你读懂这个新物种
- linux文件夹重命名busy,Linux下执行程序出现 Text file busy 提示时的解决方法
- rust如何进枪战服_rust手机版
- 从 Netflix 到 Spring Cloud Alibaba 差距不知一点点
- 天画-codeMaker组件化架构升级实践
- 右军:为张逸《解构领域驱动设计》推荐序
- JSF 网站汇总(转)
- 数据结构基础(5) --归并排序