搜索与回溯:取石子游戏
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;
}
搜索与回溯:取石子游戏相关推荐
- 博弈论之取石子游戏的学习
以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策 游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输 对任何一种局面,胜负只决定于局 ...
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MB Submit: 871 Solved: 365 [Submit][Status][Discuss] Descripti ...
- bzoj1874: [BeiJing2009 WinterCamp]取石子游戏
1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 834 Solved: 350 ...
- 威佐夫博弈:百练OJ:1067:取石子游戏
威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...
- POJ 1067 取石子游戏
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40917 Accepted: 13826 Descripti ...
- POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...
- “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**
"美登杯"上海市高校大学生程序设计邀请赛 (华东理工大学) D. 小花梨的取石子游戏 Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ? ...
- poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29959 Accepted: 9818 Descriptio ...
- 【结论】取石子游戏(jzoj 1211)
取石子游戏 jzoj 1211 题目大意: 有n个石子,每次可取1~k个石子(必须取),问先取者是否有必胜方法 输入样例 2 2 3 3 2 输出样例 No Yes 数据范围 20%的数据 K≤10 ...
最新文章
- fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...
- r语言和python-r语言和python的详细对比
- mac安装brew和zsh
- pm2集群模式mysql配置_pm2 配置方式
- Java代码总结【1】_查询手机号码归属地
- 洛谷P2680:运输计划(倍增、二分、树上差分)
- javadoc maven_Maven Fluido Skin和Javadoc类图
- 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕
- txt mining 2(tf-idf)
- 直击苹果 ARKit 技术
- 【JS笔记】5.1 Object类型
- 关于LAMP配置Let’s Encrypt SSL证书
- VSCODE: 快速生成html框架
- java生成word排版_java生成word的几种方案(转)
- Java 版学生成绩管理系统,附源码
- 检测MOS管五种方法
- Linux各个版本资源下载
- 用批处理的方式压缩文件
- 获取当前 IE 地址栏中的 URL
- OPEN-SET RECOGNITION:A GOOD CLOSED-SET CLASSIFIER IS ALL YOU NEED