信息学奥赛一本通(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. python fastapi_Python|介绍一下我的新伙伴fastapi(一)
  2. CTF的一道安卓逆向
  3. Linux加载Linux的引导程序,Linux的引导-引导加载程序:LILO和GRUB
  4. Homebrew软件包管理器中发现RCE漏洞,小心你的Mac和Linux
  5. GIS+=地理信息+容器技术(4)——Docker执行
  6. Android—打包aar以及module依赖操作
  7. Tensorflow深度学习应用(进阶篇)
  8. 解密昇腾AI处理器--DaVinci架构(计算单元)
  9. 苏炳添成为小米代言人
  10. 苹果修复三个已遭利用的 iOS 0day
  11. python的优点有哪些-python的优点和缺点是什么?
  12. Redis详解(六)——Redis主从同步原理与配置
  13. 基于 Google 搜索的半自动推荐
  14. vb.net使用hook技术之键盘鼠标钩子
  15. 【公开课】国内外公开课网址
  16. 万维钢:但是人终将老去
  17. 全球及中国农业微量营养素行业商业模式分析及投资风险预测报告2022-2028年版
  18. EasyExcel合并相同内容单元格及动态标题功能的实现
  19. Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案
  20. 图像传感器binning_图像传感器的两种缩放模式

热门文章

  1. 在函数中利用scanf为结构体数组赋值
  2. 功夫不负有心人,终于解决TeamViewer在局域网中远程桌面控制
  3. c语言字符秒表,分钟秒表
  4. Mac 安装maven时 mvn not found
  5. 非常齐全的电脑知识(先保存,留备用)
  6. pytorch + visdom 应用神经网络、CNN 处理手写字体分类
  7. Ubuntu ffmpeg 多个视频合成 命令
  8. python pandas中describe()
  9. Docker by Lucien (一)
  10. ClassPathScanningCandidateComponentProvider扫描class文件