2018年全国多校算法寒假训练营练习比赛(第五场)G-送分啦-QAQ(博弈)

时间:2021-10-12 11:10:48

有趣的一道数学题。

题目描述

    幼儿园开学了,为了让小盆友们能尽可能的多的享受假期。校长大人决定让小盆友分批到校,至于每批学生来多少人由一个小*和一个小仙女负责,两个人轮番负责,校长会在最后的时候去查看工作进度,小*不想被别人嘲笑自己傻,小仙女要证明自己比小*聪明。所以她们回去争抢安排最后一名小盆友。每次安排的小盆友至少为1,至多为上一次安排的2倍。小仙女抢到了先手的机会。第一次安排小盆友不能直接安排所有的小盆友一起回校。

输入描述:

单组测试数据
输入一个整数n——n代表小盆的个数(n>=2&&n<=1e9)

输出描述:

输出获胜人的名字——“Xian”或者“Sha”
示例1

输入

3

输出

Sha

说明

(Fisrt)1 -> (Second)  2         ||     2 - > 1  无论小仙女先送一个还是两个都会被小*获胜

示例2

输入

4

输出

Xian

说明

1 -> 2 -> 1    ||    1 -> 1 -> 2        小仙女先送一个,小*无论送一个或者两个都会被小仙女取胜。

比赛时也没推出来是斐波那契。

代码:

#include <stdio.h>using namespace std; const int N = 55;    int f[N];    void Init() {     f[0] = f[1] = 1;     for(int i=2;i<N;i++)     f[i] = f[i-1] + f[i-2]; }    int main() {     Init();     int n;     scanf("%lld",&n);        bool flag = 0;         for(int i=0;i<N;i++)         {             if(f[i] == n)             {                 flag = 1;                 break;             }         }         if(flag)        printf("Sha\n");        else           printf("Xian\n");        return 0;}