1218:取石子游戏

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 4790     通过数: 2208

【题目描述】

有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。

比如初始的时候两堆石子的数目是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取整后的值。

#include<iostream>
using namespace std;
bool dfs(int a,int b)
{if(a < b) swap(a,b);if(a%b == 0) return true;//a是b的整数倍的时候,可以一次性取完 for(int k = a/b; k >= 1; --k)//如果不满足条件,则重新按照倍数开始取,但是结果要取反 {if(!dfs(a-b*k,b))return true;}return false;
}
int main()
{int a,b;while(cin >> a >> b){if(a==0 && b==0) break;if(dfs(a,b)) cout << "win" << endl;else cout << "lose" << endl;}
}
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
bool js(long long a, long long b)
{//a==b的时候先手可以直接取完,要注意考虑这种情况 if(a/b >= 2 || a == b) return true;//是否满足先手必胜的条件 else return !js(b,a-b);//如果不满足先手必胜的条件,就继续取石子,但是结果要取反
}
int main()
{long long a,b;while(cin >> a >> b){if(a==0 || b==0) return 0;if(b > a) swap(a,b);//把石子多的那堆放在前面if(js(a,b)) cout << "win"  << endl;else cout << "lose" << endl;}return 0;
} 

搜索与回溯:取石子游戏相关推荐

  1. 博弈论之取石子游戏的学习

    以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策 游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输 对任何一种局面,胜负只决定于局 ...

  2. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  3. bzoj1874: [BeiJing2009 WinterCamp]取石子游戏

    1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 834  Solved: 350 ...

  4. 威佐夫博弈:百练OJ:1067:取石子游戏

    威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...

  5. POJ 1067 取石子游戏

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40917   Accepted: 13826 Descripti ...

  6. POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K              Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...

  7. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**

    "美登杯"上海市高校大学生程序设计邀请赛 (华东理工大学) D. 小花梨的取石子游戏 Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ? ...

  8. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29959   Accepted: 9818 Descriptio ...

  9. 【结论】取石子游戏(jzoj 1211)

    取石子游戏 jzoj 1211 题目大意: 有n个石子,每次可取1~k个石子(必须取),问先取者是否有必胜方法 输入样例 2 2 3 3 2 输出样例 No Yes 数据范围 20%的数据 K≤10 ...

最新文章

  1. fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...
  2. r语言和python-r语言和python的详细对比
  3. mac安装brew和zsh
  4. pm2集群模式mysql配置_pm2 配置方式
  5. Java代码总结【1】_查询手机号码归属地
  6. 洛谷P2680:运输计划(倍增、二分、树上差分)
  7. javadoc maven_Maven Fluido Skin和Javadoc类图
  8. 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕
  9. txt mining 2(tf-idf)
  10. 直击苹果 ARKit 技术
  11. 【JS笔记】5.1 Object类型
  12. 关于LAMP配置Let’s Encrypt SSL证书
  13. VSCODE: 快速生成html框架
  14. java生成word排版_java生成word的几种方案(转)
  15. Java 版学生成绩管理系统,附源码
  16. 检测MOS管五种方法
  17. Linux各个版本资源下载
  18. 用批处理的方式压缩文件
  19. 获取当前 IE 地址栏中的 URL
  20. OPEN-SET RECOGNITION:A GOOD CLOSED-SET CLASSIFIER IS ALL YOU NEED

热门文章

  1. // 和 \\ 都表示什么意思
  2. AnyRTC将携互动直播连线2016杭州·云栖大会
  3. 百度云生态分享日| 网络技术及应用主题沙龙圆满落幕
  4. Linux查看磁盘空间的命令
  5. matlab中alw,MATLAB环境下遗传算法优化工具箱的应用_刘万林
  6. JAVAswing编写界面
  7. 手机屏幕xy坐标软件_软件工程中的xy问题
  8. [转载]集成电路芯片IC封装技术的发展
  9. Windows10远程桌面连接配置
  10. Java面试题目大汇总(附参考答案)