问题描述
1、 本游戏是一个二人游戏;
2、 有一堆石子一共有n个;
3、 两人轮流进行;
4、 每走一步可以取走1…m个石子;
5、 最先取光石子的一方为胜;
如果游戏的双方使用的都是最优策略,请输出先手后手哪个人能赢。
分析:
当剩下m+1个石子的时候,无论取多少,剩下的一定在m以内,该情况下对方一定赢
把n表示成 n=(m+1)*a+b
先手第一轮取走b个,剩下 (m+1)*a 个
后手取走x个,之后先手只需要取走(m+1)-x个,然后就变成了剩下 ( m + 1 ) * (a-1)个
先手能够一直把剩余石子保持在(m+1)的倍数上,最后先手必胜
如果开始的时候b就为0,也就是说如果开始的时候n就是(m+1)的倍数,
先手取完之后,后手就可以用同样的方法,先手必败
总结:n%(m+1)!=0 的时候先手必胜,否则必败
code:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
if(n%(m+1)==0){
cout<<"second"<<endl;
}else{
cout<<"first"<<endl;
}
}
return 0;
}