OpenJudge NOI题库 6266:取石子游戏
来源:互联网 发布:远程迅雷 linux 编辑:程序博客网 时间:2024/05/22 03:01
题目
- 本题的提示还是够详细了:
假设石子数目为(a,b)且a >= b,如果[a/b] >= 2则先手必胜,如果[a/b]<2,那么先手只有唯一的一种取法.
[a/b]表示a除以b取整后的值. - 当x/y<2时,很显然只有一种取法
- 当x/y>=2时,这时候该走的人(S)总是能赢(如果x=k*y+r,当S为状态为[r,y]的该走的人,且其最后赢家为自己,那么S先走到[r+y,y],O走到[r,y],该S走,S赢;其最后赢家为对手时,那么S先走到[r,y],该O走,那么最后的赢家就是O的对手:S)
#include<cstdio>int cnt;long long n,m;void check(){ cnt=1-cnt; if(m==n||n/m>=2||m/n>=2) return ; if(n>m) n-=m; else m-=n; check();}int main(){ while(scanf("%I64d%I64d",&n,&m)&&n&&m){ cnt=0; check(); if(cnt) printf("win\n"); else printf("lose\n"); }}
一开始的代码: wa了
#include<cstdio>int cnt;long long n,m;void check(){ cnt=1-cnt; if(!n||!m||n/m>=2||m/n>=2) return ; if(n>m) n-=m; else m-=n; check();}int main(){ while(scanf("%I64d%I64d",&n,&m)&&n&&m){ cnt=0; check(); if(cnt) printf("win\n"); else printf("lose\n"); }}
原因就在:if(!n||!m||n/m>=2||m/n>=2) return ; 中!n||!m将cnt向后推了一个人,会错。
0 0
- OpenJudge NOI题库 6266:取石子游戏
- [OpenJudge-NOI]取石子游戏
- 【NOI】6266 取石子游戏
- [F][5]openjudge 6266 取石子游戏
- openjudge 取石子游戏(递归)
- [OpenJudge] 2.5基本算法之搜索 取石子游戏分析
- "取石子"游戏
- 取石子游戏
- 取石子游戏
- 取石子游戏
- POJ1067取石子游戏
- PKU1067 取石子游戏
- 取石子游戏
- 取石子游戏
- 1067 取石子游戏
- PKU1067(取石子游戏)
- 1679 取石子游戏
- 1773 取石子游戏
- C语言中的算术运算符和算术表达式
- python中 tab 键自动补全
- HashMap Hashtable区别
- hdu 1029 Ignatius and the Princess IV 动态规划
- 在tomcat上发布一个javaweb项目
- OpenJudge NOI题库 6266:取石子游戏
- Java+MySQL实现网络爬虫程序
- verilog 有符号数(2转)
- 如何开发一个Server-Client模型的程序
- tail 命令
- HDU 5531 Rebuild ——— 2015ACM-ICPC亚洲区长春站
- Nginx服务器的概念
- Android中对加载大图的处理
- log4j:ERROR Failed to load driver问题