信息学奥赛一本通(C++版)在线评测系统


解题思路:

(1)题目还是比较容易懂的,但是操作起来有一些难度,有两堆石子块儿,每次只能从大的里面取小的数量的整数倍,然后一直到有一方全部拿空便为取胜。

(2)里面有一句特别关键的话,叫做两个人都采取最优策略,这是什么意思呢?意思当式子数量确定的时候,两个人都已经经过精确的计算,每一步应该怎么拿,然后确保自己能够胜利,如果还是很抽象,那么看一下示例:

对于25和7是有4种方案的,并且不同的方案赢的选手也不一样,但是题目说,选手都会按照最优策略来取,所以选手1保证赢的话,会按照第二种方案,这样先手赢

(3)这道博弈论的题为什么会出现在搜索里呢?因为每次取都会按照较小值的整数倍来取,需要枚举每一种方案。设dfs(a,b)函数为取的两堆石子块,(a>=b),递归出口为当a%b==0的时候,那么就可以一次取完a,获胜。

(4)如何判断是先手赢还是后手赢呢?可以设置一个计数器,可以发现,如果a%b==0的时候,如果当前是偶数的时候,表示是选手2取,那么后手赢,反之先手赢

(5)题目中还有一条特别关键的信息,叫做a/b>=2的时候,先手必赢,那么递归出口便增加了一个条件,这样会大大缩小时间复杂度(想想为什么呢?)


#include<bits/stdc++.h>
using namespace std;int a,b;
bool flag;//用来标记先手是否赢 void dfs(int x,int y,int cnt)
{if(x<y)swap(x,y);if(x%y==0||x/y>=2)//如果x能被y整除,即把x全部取掉胜利 {if(cnt%2==1)//如果是奇数,说明是先手最后取的flag=1;//打上标记  return ;//递归出口 }else{for(int i=1;i<=x/y;i++)//枚举可以取的整数倍 {dfs(x-i*y,y,cnt+1);//继续下一次递归} }
}
int main()
{while(1){cin>>a>>b;if(a==0&&b==0)//结束条件break;dfs(a,b,1);//开始深搜if(flag==1)cout<<"win"<<endl;elsecout<<"lose"<<endl;flag=0;//标记初始化 }return 0;
}

【分割问题】-取石子游戏相关推荐

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

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

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

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

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

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

  4. POJ 1067 取石子游戏

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

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

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

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

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

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

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

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

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

  9. hdu 2516 取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  10. 信息学奥赛一本通(1218:取石子游戏)

    1218:取石子游戏 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 8837     通过数: 4144 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候, ...

最新文章

  1. 电脑上同时安装了tensorflow和tensorflow-gpu,如何默认使用tensorflow-gpu
  2. [Database] 数据库完整性
  3. Asp.net MVC 4 异步方法
  4. 未来教育计算机二级01为法律一班,2019年3月计算机二级MSOffice提分试题及答案012...
  5. 《RPA、AI、.NET Core 与未来》-中国.NET开发者峰会
  6. rsa 模数 指数转换 c语言_模数转换,你必须知道的8个经典ADC转换电路方案
  7. python闭包两种写法_浅析Python闭包
  8. GSM Hacking:如何对GSM/GPRS网络测试进行测试
  9. 数值积分方法之2——梯形法与外推法求近似积分
  10. 在线计算机励志文案,让人充满动力的经典励志文案
  11. ak和sk的意思及用法
  12. 苏宁成立智能终端公司 并发布BiuOS及10款智能硬件
  13. GLES2.0中文API-glBindAttribLocation
  14. opencv之基本形状识别
  15. C++无法在头文件中定义string类数据
  16. 音频处理工具 sox 使用
  17. Gerrit代码审查使用教程
  18. 通过python我实现了照片转化为动漫模式,媳妇儿再也不用愁没有好看的头像了~
  19. 我国数字出版产业发展规模[中国新闻出版网]
  20. 今天是礼拜天(转移)

热门文章

  1. python-16-python并行计算程序multiprocessing
  2. 央视焦点访谈:借“区块链”名义设骗局乱象丛生让人忧
  3. 简单分析小米智能插座基础版电路
  4. 初识Indusoft Web Studio(IWS)
  5. 【方向盘】版本历史代码示例之:WebSocket、JSTL
  6. Java毕设项目家政服务公司管理信息计算机(附源码+系统+数据库+LW)
  7. 10000字详解,炫酷的3D特效Shader是如何炼成的
  8. python-爬虫-孙兴华
  9. 测试工程师进阶,从0-1学习Cucumber之基于behave框架自动化测试教程(三)
  10. notepad linux,适用于Linux的11种最佳Notepad ++替代品