题干:
小乐乐是一个比较喜欢吃糖豆的小孩子,小乐乐的哥哥大乐乐也同样爱吃糖豆。
作为一个小孩子,他们永远觉得谁吃掉了最后一个糖豆,谁吃的糖豆最多。
为了公平起见小乐乐与大乐乐商量吃糖豆的规则如下:
1. 小乐乐与大乐乐轮流吃糖豆。
2. 小乐乐作为弟弟,小乐乐先吃糖豆。
3. 小乐乐第一次可以吃任意不超过n 个糖豆。(n为糖豆初始总数)
4. 后一个人每次能吃【1,前一个人吃的糖豆*2】
已知有n个糖豆,小乐乐与大乐乐开始分食糖豆,小乐乐与大乐乐都采用最优策略,请问谁能吃到最后一粒糖豆?
输入描述:
第一行输入整数n(2<=n<=1000)。
输出描述:
输出吃到最后一颗糖豆的人的名字。”Small”(小乐乐)/“Big”(大乐乐)。
示例1
输入
复制
2
输出
复制
Big
说明
小乐乐只能拿1个,大乐乐会吃掉最后一个。
示例2
输入
复制
4
输出
复制
Small
说明
小乐乐取走一个,大乐乐只能取走【1,2】个,无论大乐乐取走几个小乐乐都会吃掉最后一个。
解题报告:
数据水了,,很多人直接放过去了。。其实就是个Fib博弈。
AC代码:
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 ;
}