这道题是中文题,大家理解我就不讲了,这里就是有一个圈,然后后面的人最多可以取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; }