杭电3951
来源:互联网 发布:数控车床编程怎么取消n 编辑:程序博客网 时间:2024/05/13 13:32
这道题是中文题,大家理解我就不讲了,这里就是有一个圈,然后后面的人最多可以取1—k个,与原来不同的是这里的是一个圈,而且你取的硬币是需要连在一起的,那么这时候我们就知道第一个人取走之后(假设没有取完,完了就赢了),第二个人就面对的是一排石子,而且他也是只能取1—k个,还是连续的,那么他应该怎么办么?要想赢,你可能想到将这时候的局面转变为sg=0的局面,完全正确。但是怎么实施,在博弈之中一直有一个技巧,就是只要双边的取法是平等的(不平等的比如后面的可以取你的双倍),那么我们就可以营造出一种局面。什么局面?就是你取完之后,剩下的堆数数偶数,并且有成对的堆的数量是相等的,这时候无论对方采取什么策略,你都可以采取同样的策略,这是必赢的,那么作为第二取的人,我们能不能做到这样?可以。假设k=1,那就是只能取一个,那就是看你的时候是基数还是偶数。假设不是1.那么这时候剩下的石子数量不是基数就是偶数(假设不为0),那么你可以取1—k,这时k>=2我们可以取和剩下堆数情况相同(基数或偶数),来是的剩下的数量是偶数,并且是两堆,这时候第一取的人必败,那么有了这一点,后面的就好办了。
下面提供一个代码:
#include<iostream>using namespace std;int main(){ int m; cin>>m; int N,k; int i=0; while(m--) { cin>>N>>k; i++; cout<<"Case "<<i<<": "; if(k==1) if(N%2==0) cout<<"second"<<endl; else cout<<"first"<<endl; else { if(N<=k&&k>=2) cout<<"first"<<endl; else cout<<"second"<<endl; } } return 0;}
0 0
- 杭电3951
- 杭电
- 杭电
- 杭电
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- 杭电ACM1061Rightmost Digit
- 杭电2099 7.11
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电ACM1466
- 杭电ACM1003
- 杭电ACM1225
- 杭电ACM2023
- 杭电ACM2602
- 杭电ACM2955
- 杭电ACM3198
- 杭电ACM2028 求教
- hibernate联合主键-XML形式
- leetcode: Copy List with Random Pointer
- Qt下使用OpenGL(17)-根据NeHe的教程改写的
- 多线程更新UI文本框被键盘挡住问题
- 介绍GitHub新建一个Repo
- 杭电3951
- 工作十年的他,为何只拿毕业三年的工资
- Java中toString方法作用
- Match Previously Matched Text Again (匹配前面匹配的文本)
- IT人的自我导向型学习:学习的4个层次
- linux根文件解析
- 利用GoogleMaps sdk 1.3.1 实现在 iOS 5.0下 编译成功!真是太不容易了
- svn提示出错异常为remains in conflict
- Release版本