GZHU - 1516 龙珠游戏 (斐波那契博弈论)

终于!你集齐了七颗龙珠!
你使用七颗龙珠召唤了神龙,想要许一个愿望。

【我的愿望是,请给我一个laop。。】
〖你的龙珠不够啊〗,神龙摇了摇头。

。。。

不够?
稍等
桥豆麻袋
不是说是七颗吗?
〖不是啊,一共有9223372036854775807颗啊〗
【wtf。。。】

神龙看你也怪可怜了,都这个岁数了还没有女朋友,于是提出了一个条件。
〖这样吧,我这里有一部分龙珠,一共是n颗。我们来玩个游戏。我们轮流取龙珠,每个人每次最少取1颗,最多不能超过上一个人的取的龙珠数的2倍。如果轮到谁没得取了那个人就算输。你要是赢了我我就满足你的一个愿望〗
【谁先手?】
〖你先手吧。〗
【那我第一次全取了不就必定能赢吗?快点给我laop。。】
〖啊不不不,第1个人只能取最多n-1颗〗
【那要是你的n=1。。。】
〖神龙不会那么穷的,放心〗

在那之前,你,身为圣广州皇家综合大学的学生,立刻就意识到,只要你知道n是多少,你就可以知道你能不能够赢。于是你偷偷数了一下神龙的龙珠数,知道了n。
现在,你需要判断你是否能够赢。
为什么要这么做呢,因为如果你必定不能赢的话为什么还要浪费时间玩这个游戏呢。
不如把神龙打一顿解解气。

Input
第一行有一个整数t,表示数据组数。
接下来的t行,每行有一个整数n,表示龙珠的个数。
t<=10000,n>=2且n在long long范围内。
Output
对于每组数据,如果你存在必胜策略可以保证必定可以得到神龙的祝福,则输出"Win!"。
否则输出"Lose…"
Sample Input
2
2
6
Sample Output
Lose…
Win!
Hint
你最终输掉了游戏。
你想打神龙一顿,却发现神龙早已消失。
你发现你的龙珠也没有了。
你顿时觉得你的人生十分的悲惨。
而且还没有女朋友。
问题链接: -
问题简述: 中文题意
问题分析: 起初一直想不到怎么做,最后师兄提示相关斐波那契博弈论…龙珠数量只要是斐波那契数列里的数就是必败态,所以打表出long long范围内的斐波那契数列再逐个判断即可(最坑的是不能把cin与scanf,printf,cout混用,就因为这个找了一天的错)
AC通过的C++语言程序如下:

#include <iostream>
#include <algorithm>
#include <iostream>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <math.h>
#include <climits>
#include <iomanip>
#include <queue>
#include<vector>
#define ll long long
using namespace std;
 
long long feibonaq[100]={
1,
2,//i==1
3,
5,
8,
13,
21,
34,
55,
89,
144,
233,
377,
610,
987,
1597,
2584,
4181,
6765,
10946,
17711,
28657,
46368,
75025,//i=23
121393,
196418,
317811,
514229,
832040,
1346269,
2178309,
3524578,
5702887,
9227465,
14930352,
24157817,
39088169,
63245986,
102334155,
165580141,
267914296,
433494437,
701408733,
1134903170,
1836311903,
2971215073,//i==45
4807526976,
7778742049,
12586269025,
20365011074,
32951280099,
53316291173,
86267571272,
139583862445,
225851433717,
365435296162,
591286729879,
956722026041,
1548008755920,
2504730781961,
4052739537881,
6557470319842,
10610209857723,
17167680177565,
27777890035288,
44945570212853,
72723460248141,
117669030460994,
190392490709135,//i=68
308061521170129,
498454011879264,
806515533049393,
1304969544928657,
2111485077978050,
3416454622906707,
5527939700884757,
8944394323791464,
14472334024676221,
23416728348467685,
37889062373143906,
61305790721611591,
99194853094755497,
160500643816367088,
259695496911122585,
420196140727489673,
679891637638612258,
1100087778366101931,
1779979416004714189,
2880067194370816120,
4660046610375530309,
7540113804746346429};
 
int main()
{
    ios::sync_with_stdio(false);
    int t;
    scanf("%d",&t);
    while(t--)
    {
        ll k;
        int flag=0;
        scanf("%lld",&k);
        if(k<=2971215073)
        {
            for(int i=1;i<=45;i++)
            {
                if(k<feibonaq[i]) break;
                if(k==feibonaq[i])
                {
                    flag++;
                    break;
                }
            }
        }
        else
            for(int i=46;i<=90;i++)
            {
                if(k<feibonaq[i]) break;
                if(k==feibonaq[i])
                {
                    flag++;
                    break;
                }
            }
        if(flag==1)
        {
            printf("%s\n","Lose...");
        }
        else printf("%s\n","Win!");
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值