题干:
 

 小乐乐是一个比较喜欢吃糖豆的小孩子,小乐乐的哥哥大乐乐也同样爱吃糖豆。

作为一个小孩子,他们永远觉得谁吃掉了最后一个糖豆,谁吃的糖豆最多。

为了公平起见小乐乐与大乐乐商量吃糖豆的规则如下:

1.     小乐乐与大乐乐轮流吃糖豆。

2.     小乐乐作为弟弟,小乐乐先吃糖豆。

3.     小乐乐第一次可以吃任意不超过n 个糖豆。(n为糖豆初始总数)

4.     后一个人每次能吃【1,前一个人吃的糖豆*2】

    已知有n个糖豆,小乐乐与大乐乐开始分食糖豆,小乐乐与大乐乐都采用最优策略,请问谁能吃到最后一粒糖豆?

输入描述:

第一行输入整数n(2<=n<=1000)。

输出描述:

输出吃到最后一颗糖豆的人的名字。”Small”(小乐乐)/“Big”(大乐乐)。

 

示例1

输入

复制

2

输出

复制

Big

说明

小乐乐只能拿1个,大乐乐会吃掉最后一个。

示例2

输入

复制

4

输出

复制

Small

说明

小乐乐取走一个,大乐乐只能取走【1,2】个,无论大乐乐取走几个小乐乐都会吃掉最后一个。

解题报告:

   数据水了,,很多人直接【牛客 - 302哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(低年级)】小乐乐吃糖豆  (fIb博弈)_数据放过去了。。其实就是个Fib博弈。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int fib[105];
int main()
{
int n;
fib[1]=1;
fib[2]=2;
for(int i = 3; i<=20; i++) fib[i] = fib[i-1]+fib[i-2];
cin>>n;
if(binary_search(fib+1,fib+20,n)) puts("Big");
else puts("Small");

return 0 ;
}