zoukankan      html  css  js  c++  java
  • hdu 1848 Fibonacci again and again

    Fibonacci again and again

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    http://acm.hdu.edu.cn/showproblem.php?pid=1848

    Problem Description
    任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:
    F(1)=1;
    F(2)=2;
    F(n)=F(n-1)+F(n-2)(n>=3);
    所以,1,2,3,5,8,13……就是菲波那契数列。
    在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题。
    今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下:
    1、  这是一个二人游戏;
    2、  一共有3堆石子,数量分别是m, n, p个;
    3、  两人轮流走;
    4、  每走一步可以选择任意一堆石子,然后取走f个;
    5、  f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);
    6、  最先取光所有石子的人为胜者;

    假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。
     
    Input
    输入数据包含多个测试用例,每个测试用例占一行,包含3个整数m,n,p(1<=m,n,p<=1000)。
    m=n=p=0则表示输入结束。
     
    Output
    如果先手的人能赢,请输出“Fibo”,否则请输出“Nacci”,每个实例的输出占一行。
     
    Sample Input
    1 1 1 1 4 1 0 0 0
     
    Sample Output
    Fibo Nacci
     
    利用SG函数和SG定理
    SG函数:定义SG(x)=mex(S)  
    S 是x所有后继状态的SG 函数值集合,mex(S)表示不在S中的最小非负整数
    SG定理:游戏和的SG函数等于各子游戏SG函数的Nim和(异或和)
    记忆化搜索SG函数
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,p;
    int f[1001],sg[1001];
    int s(int i)
    {
        if(sg[i]!=-1) return sg[i];
        bool v[1001];
        memset(v,0,sizeof(v));
        int j=1;
        while(f[j]<=i) v[s(i-f[j++])]=true;
        for(int k=0;k<=i;k++) 
         if(!v[k]) return sg[i]=k;
    }
    int main()
    {
        f[1]=1; f[2]=2;
        int i=2;
        while(i<=1000) f[++i]=f[i-1]+f[i-2];
        memset(sg,-1,sizeof(sg));
        sg[0]=0;
        while(scanf("%d%d%d",&n,&m,&p)!=EOF)
        {
            if(!n) return 0;
            if(s(n)^s(m)^s(p)) printf("Fibo
    ");
            else printf("Nacci
    ");
        }
    }
     
  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6741716.html
Copyright © 2011-2022 走看看