hdu1848 Fibonacci again and again

2024-05-14 12:32
文章标签 fibonacci hdu1848

本文主要是介绍hdu1848 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): 3622 Accepted Submission(s): 1500


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
ACM Short Term Exam_2007/12/13

Recommend
lcy
gc函数,只要套一下模板就可以了!
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define M 1050
int k,fibo[M],f[M];
int mex1(int p){int i,t,g[M]={0};for(i=0;i<k;i++){t=p-fibo[i];if(t<0)break;if(f[t]==-1)f[t]=mex1(t);g[f[t]]=1;}for(i=0;;i++){if(!g[i])return i;}
}
int main()
{int m,n,p,i,ans;fibo[0]=1,fibo[1]=2,i=1;while(fibo[i]<1050){fibo[i+1]=fibo[i-1]+fibo[i];i++;}k=i;memset(f,-1,sizeof(f));f[0]=0;for(i=1;i<=1000;i++){f[i]=mex1(i);}while(scanf("%d%d%d",&m,&n,&p)!=EOF&&m+n+p){ans=0;ans^=f[m];ans^=f[n];ans^=f[p];if(ans)printf("Fibo\n");else printf("Nacci\n");}return 0;
}


这篇关于hdu1848 Fibonacci again and again的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988752

相关文章

js,给定一个数,如何求Fibonacci值

/*给定一个数,如何求Fibonacci值::F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)*/ function fibonacci(n){        if(n<2){             return n;          }        return fibonacci(n-1)+fibonacci(n-2); } alert(fibonacci(6)

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i

蓝桥杯入门训练——Fibonacci数列

入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB         问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10

第十九题(最快的方法求Fibonacci数列)

题目:定义Fibonacci 数列如下:         /          0                      n=0 f(n)=            1                      n=1         \    f(n-1)+f(n-2)          n=2 输入n,用最快的方法求该数列的第n 项。 1.采用递归求解,函数的调用过程中,每个函数

快速Fibonacci数,矩阵法

Fibonacci Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9156 Accepted: 6494 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For

【矩阵快速幂】POJ 3070 Fibonacci (大数 Fibonacci)(大二版)

【题目链接】:click here~~ 【题目大意】: In the Fibonacci integer sequence, F0 = 0, F1 = 1, andFn =Fn − 1 + Fn − 2 forn ≥ 2. For example, the first ten terms of the Fibonacci sequence are: 0, 1, 1, 2, 3, 5,

poj3070--Fibonacci(矩阵的快速幂)

Fibonacci Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9650 Accepted: 6856 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For

Codeforces Round #FF (Div. 1) C. DZY Loves Fibonacci Numbers

用线段树维护 记录三个值,一个是区间和,一个是该区间 1 , 2 位置的斐波那契数列前两项大小(因为两个斐波那契数列相加得到的还是一个斐波那契数列,且该数列只与两个首项和项数有关,另外斐波那契数列前N 项和  与  该斐波那契数列第N+2减去第二项  的值 相同) 该线段树的pushdown有一些改变,直接利用已有的update函数将懒标记下传,下传时改变的区间是传入pushdown的区间大

Fibonacci求解

想想刚刚学C语言的时候,一开始接触递归的时候,感觉这东西实在是太不可思议了,可以将程序变得异常简洁并且非常易于理解。然后啥问题都想问递归上去扯,搞出个递归公式出来,问题就基本解决了但是随着学习的深入,渐渐也道听途说到递归也不是那么好,因为对函数的递归调用会造成巨大的开销而且程序的运行速度也会受到限制。最近也上了些数据结构,发现书上给出递归算法的同时也会给出非递归算法!瞬间感觉,非递

hdu 5167 Fibonacci(dfs)

Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1003    Accepted Submission(s): 264 Problem Description Following is the