HDU 2149 巴什博奕
2016-01-18 18:38
183 查看
简单介绍一下:巴什博奕
题目模板: 一堆棋子(n个),两个玩家A和B, 玩家每次轮流从该堆棋子中取若干个,至少1个,之多m个;经过若干轮之后,谁先取完谁就获胜。
分析:
如果n=m+1;则无论A 从中取出多少,B 总能取完。
所以设n=(m+1)*k+r ; A从中取 r 个,B从中取 x 个,A 再从中取m+1-x个,则剩余(m+1)(k-1)个。。。。。。按照这样的取法(即每次留给B的个数要为(m+1)的倍数),这样最后A必胜。
原题链接: HDU 2149
注意点:此题的加价数目可能大于田地的数目,因此要特判一下
题目模板: 一堆棋子(n个),两个玩家A和B, 玩家每次轮流从该堆棋子中取若干个,至少1个,之多m个;经过若干轮之后,谁先取完谁就获胜。
分析:
如果n=m+1;则无论A 从中取出多少,B 总能取完。
所以设n=(m+1)*k+r ; A从中取 r 个,B从中取 x 个,A 再从中取m+1-x个,则剩余(m+1)(k-1)个。。。。。。按照这样的取法(即每次留给B的个数要为(m+1)的倍数),这样最后A必胜。
原题链接: HDU 2149
注意点:此题的加价数目可能大于田地的数目,因此要特判一下
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[1110]; int main() { int n,m,t; while(scanf("%d%d",&m,&n) != EOF) { int num=0,flag=0; if(n>m) { for(int i=m;i<=n;i++) a[num++]=i; flag=1; } if(flag) t=m-1; else t=n; for(int i=1;i<=t;i++) { int s=(m-i)%(n+1); if(!s) a[num++]=i; } if(num==0) printf("none\n"); else{ sort(a,a+num); for(int i=0;i<num;i++){ if(!i) printf("%d",a[i]); else printf(" %d",a[i]); } printf("\n"); } } return 0; }
相关文章推荐
- Nginx搭建反向代理服务器过程详解
- 获取.amr文件的时长
- mybatis 多参数 list和String
- 如何让一个DIV水平,垂直方向都居中于浏览器?
- Codeforces Gym 100531G Grave 水题
- eclipse 快捷键
- iOS开发ARC内存管理技术要点
- 浅析概率中的频率学派观点和贝叶斯学派观点
- Python求索之路2——深浅拷贝&函数
- Gitlab RPC failed; result=22, HTTP code = 413 解决方法
- JAVA 构造函数 调用 多态的成员方法 的问题
- hdu5500 Reorder the Books
- js/javascript中判断对象类型
- zeromq源码分析笔记之无锁队列ypipe_t(3)
- 作为测试人员一般经历的几个阶段
- iOS网络-NSURLSessionUploadTask文件上传
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的
- 复制集工作机制
- 非计算机类专业毕业生程序员职业生涯思考
- Office365 SKU-1