NOI 题库 6266
2024-10-16 15:25:47
6266 取石子游戏
- 描述
-
有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍.最后谁能够把一堆石子取空谁就算赢.
比如初始的时候两堆石子的数目是25和725 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取整后的值. - ———————————分割线—————————————
- 递归求解
-
#include "iostream"
#include "cstdio" using namespace std ; inline void gswap ( int &x , int &y ) { int temp = x ; x = y ; y = temp ; } void DFS ( int n , int m , const int Turn ) {
if ( n < m ) gswap ( n , m ) ;
if ( ! ( n % m ) || n / m >= ) {
if ( Turn == ) cout << "win" << endl ;
else cout << "lose" << endl ;
return ;
} if ( Turn == ) DFS ( n % m , m , ) ;
else if ( Turn == ) DFS ( n % m , m , ) ;
} int main ( ) {
int N , M ;
while ( scanf ( "%d %d" , &N , &M ) == && N && M ) {
DFS ( N , M , ) ;
}
return ;
}2016-10-20 11:01:14
(完)
最新文章
- iOS-Xcode使用技巧
- 4、jvm内存回收&mdash;&mdash;器
- Python % 格式化字符串
- step by step 之餐饮管理系统二
- ThinkPHP中的动态缓存(S方法)和快速缓存(F方法)(转)
- java-mina(nio 框架)
- C语言数据结构----栈的应用(程序的符号匹配检测)
- for语句的嵌套(示例及练习)
- 基于visual Studio2013解决C语言竞赛题之1052求根
- JavaScript 属性操作
- Java 集合 LinkedList的ListIterator
- Linux:crontab的安装以及使用方法
- css3快速复习
- Springboot的static和templates区别
- C++设计模式——组合模式
- day34-python操作redis三
- Looper loop
- 结尾非零数的奇偶性(问题来源于PythonTip)
- JMeter学习(十三)目录介绍(转载)
- Android-SPUtil-工具类
热门文章
- boost之lexical_cast
- kindeditor在光标处插入编辑器外的数据
- 理解Kalman滤波的使用
- JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。
- ecshop编辑器FCKeditor修改成KindEditor编辑批量上传图片
- 分布式中Redis实现Session终结篇
- 分享一个Visual Studio的背景插件,让堆码更富情趣
- win7使用自带资源管理器来登陆FTP
- Burpsuite+sqlmap批量扫描sql漏洞
- Html 两个DIV并排的问题