C. C. Blog

Security Research, Algorithm and Data Structure

取石子游戏

题目描述

一天小明和小红在玩取石子游戏,游戏规则是这样的:
(1)本游戏是一个二人游戏;
(2)有一堆石子,共有n个;
(3)两人轮流进行;
(4)每走一步可以取走1~m个石子;
(5)最先取光石子的一方为胜。
如果游戏的双方使用的都是最优策略,请输出哪个人能赢。

输入

输入的第一行是一个正整数C(C<=100),表示有C组测试数据。
每组输入两个整数n和m(1<=n,m<=1000),n和m的含义见题目描述。

输出

对于每组输入,如果先走的人能赢,请输出"first",否则请输出"second"。

样例输入

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 }```

View Code

  • 本文作者: CCWUCMCTS
  • 本文链接: https://ccwucmcts.github.io/posts/15063/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!