Fibonacci again and again HDU - 1848
任何一个大学生对菲波那契数列(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函数求解 需要注意一点就是斐波那契数列是f[0]=1;
#include<cstdio>
#include<cstring>
using namespace std;
int f[50],sg[1011],s[1011];
void getsg(int n)
{
    memset(sg,0, sizeof(sg));
    for(int i=1;i<=n;i++)
    {
        memset(s,0, sizeof(s));
        for(int j=0;f[j]<=i&&j<=20;j++)
        {
            s[sg[i-f[j]]]=1;
        }
        for(int j=0;;j++)
        {
            if(!s[j])
            {
                sg[i] = j;
                break;
            }
        }
    }
}
int main()
{
    int m,n,p;
    f[0]=1;
    f[1]=1;
    f[2]=2;
    for(int i=3;i<=20;i++)
        f[i]=f[i-1]+f[i-2];
    getsg(10);
    while(scanf("%d%d%d",&m,&n,&p),m||n||p)
    {
        if(sg[m]^sg[n]^sg[p]) puts("Fibo");
        else puts("Nacci");
    }
    return 0;
}
//Fibo 先手
//Nacci 后手Fibonacci again and again HDU - 1848的更多相关文章
- hdu 1848 Fibonacci again and again(SG函数)
		Fibonacci again and again HDU - 1848 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)= ... 
- SG函数入门&&HDU 1848
		SG函数 sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3. ... 
- 【hdu 1848】Fibonacci again and again
		Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ... 
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
		Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ... 
- hdu 1848 Fibonacci again and again(简单sg)
		Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;F(n)=F(n-1)+F(n-2 ... 
- HDU 1848 Fibonacci again and again(SG函数)
		Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ... 
- HDU 1848 Fibonacci again and again【博弈SG】
		Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F( ... 
- hdu 1848(Fibonacci again and again)(SG博弈)
		Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ... 
- hdu 1848 Fibonacci again and again(sg)
		Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ... 
随机推荐
- drools的error:Jboss rule 6.4.0 Cannot find a default StatelessKieSession
			drools的kmodule.xml文件,如果是默认加载必须放在META-INF的文件夹下,如下图 官网大佬原话 Have you defined kieSession and KieBase nam ... 
- iis mvc html
			iis mvc项目显示view文件夹下的html <system.webServer><handlers> <add name="JavaScriptHandl ... 
- window.location获取url各项参数详解
			window.location方法后还还可以带href,search等参数,下面我们来看看获取url各项参数的办法. URL即:统一资源定位符 (Uniform Resource Locator, U ... 
- 超链接显示网站 A,访问后进入网站 B
			#前端黑魔法# 出一个思考题:如何用最少的字符实现下图效果.即超链接显示网站 A,访问后进入网站 B. 当然这个是上古时代的黑魔法了,稍懂前端的都知道原理.所以这里只问最短的实现~ 一个简单的演示:( ... 
- Angular CLI的简单使用(1)
			参考地址: https://v2.angular.cn/docs/ts/latest/cli-quickstart.html Angular CLI是一个命令行界面工具,它可以创建项目.添加文件以及 ... 
- leetcode 355 Design Twitte
			题目连接 https://leetcode.com/problems/design-twitter Design Twitte Description Design a simplified vers ... 
- 卸载VS2013 2015
			我有两个VS,特别讨厌,每当使用window程序删除时候,就出现 停止工作! 然后从知乎上发现了这个 https://github.com/Microsoft/VisualStudioUninstal ... 
- centOS7虚拟机连接大网
			1.启动vm服务 如果遇到无法启动时,需要还原vm默认配置解决 2.更改vm设置为NAT模式 3.centOS开启DHCP 
- Team Foundation 版本控制
			与 Visual Studio 的一流集成. 使用富文件和文件夹差异工具突出显示代码更改. 借助强大的可视化跨分支跟踪代码更改. 集成的代码评审工具有助于在签入代码之前获得反馈. 使用托管版本或本地版 ... 
- SQLSERVER编译与重编译
			SQLSERVER编译与重编译 编译的含义 当SQLSERVER收到任何一个指令,包括查询(query).批处理(batch).存储过程.触发器(trigger) .预编译指令(prepared st ... 
