HDU 1848(sg博弈) Fibonacci again and again

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1848(sg博弈) Fibonacci again and again相关的知识,希望对你有一定的参考价值。

Fibonacci again and again

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6253    Accepted Submission(s): 2603


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
 

Author
lcy
 

Source
 

Recommend
lcy   |   We have carefully selected several similar problems for you:  1850 1846 2147 1517 1404 

 




经典的SG 博弈。

我们算出sg的值。,用三堆石头的sg值异或,假设为0则后手胜,不为0则先手胜。


#include  <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <iostream>
#include <cstdio>
using namespace std;
int hash1[1005];
int sg[1005];
int f[1005];
void getsg(int x)
{
    int i,j;
    memset(sg,0,sizeof(sg));
    for(i=1; i<=x; i++)
    {
        memset(hash1,0,sizeof(hash1));
        for(j=1; f[j]<=i; j++)
        {
            hash1[sg[i-f[j]]]=1;
        }
        for(j=0; j<=x; j++)
        {
            if(!hash1[j])
            {
                sg[i]=j;
                break;
            }
        }
    }
}
int main()
{
    f[1]=1;
    f[2]=2;
    for(int i=3;; i++)
    {
        f[i]=f[i-1]+f[i-2];
        if(f[i]>1000)
            break;
    }
    int m,n,p;
    getsg(1000);
    while(cin>>m>>n>>p,m,n,p)
    {
        if((sg[m]^sg[n]^sg[p])==0)
            cout<<"Nacci"<<endl;
        else
            cout<<"Fibo"<<endl;
    }
    return 0;
}

以上是关于HDU 1848(sg博弈) Fibonacci again and again的主要内容,如果未能解决你的问题,请参考以下文章

博弈论 SG函数(模板) HDU 1848 Fibonacci again and again

HDU 1848 Fibonacci again and again(简单博弈SG函数)

HDU 1848 Fibonacci again and again (sg函数,博弈论)

HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)

HDU.1848.Fibonacci again and again(博弈论 Nim)

hdu 1848 Fibonacci again and again