一天小明和小红在玩取石子游戏,游戏规则是这样的:
(1)本游戏是一个二人游戏;
(2)有一堆石子,共有n个;
(3)两人轮流进行;
(4)每走一步可以取走1~m个石子;
(5)最先取光石子的一方为胜。
如果游戏的双方使用的都是最优策略,请输出哪个人能赢。
2
23 2
4 3
first second
考虑第一个人什么时候赢,如果石子数为1到m,赢,m+1输,m+2可以让对方为m+1,赢,2m+2时怎么取都大于m+1输,2m+3可以取到2m+2让对方输,以此类推,如果n是m+1的整数倍,则A输,否则B输。
代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #define ll long long 7 using namespace std; 8 int T,n,m; 9 int main(){ 10 cin>>T; 11 while(T--){ 12 cin>>n>>m; 13 if(n%(m+1)){ 14 cout<<"first\n"; 15 } 16 else cout<<"second\n"; 17 } 18 return 0; 19 }
原文:https://www.cnblogs.com/sz-wcc/p/10982657.html