hdu1848(斐波那契数列+SG函数)
2013-12-04 16:35
211 查看
Fibonacci again and again
[b]Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3724 Accepted Submission(s): 1556
[/b]
[align=left]Problem Description[/align]
任何一个大学生对菲波那契数列(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、 最先取光所有石子的人为胜者;
假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。
[align=left]Input[/align]
输入数据包含多个测试用例,每个测试用例占一行,包含3个整数m,n,p(1<=m,n,p<=1000)。
m=n=p=0则表示输入结束。
[align=left]Output[/align]
如果先手的人能赢,请输出“Fibo”,否则请输出“Nacci”,每个实例的输出占一行。
[align=left]Sample Input[/align]
1 1 1
1 4 1
0 0 0
[align=left]Sample Output[/align]
Fibo
Nacci
[align=left]Author[/align]
lcy
[align=left]Source[/align]
ACM Short Term Exam_2007/12/13
[align=left]Recommend[/align]
lcy | We have carefully selected several similar problems for you: 1847 1850 1849 1404 1079
本题是斐波那契数列+SG函数的结合。状态较少,直接模拟。贴个Java小程序。
import java.util.Scanner; public class SG { static int []fani=new int[16]; static int []SGArray=new int[10000+100]; static int []hash=new int[10000+100]; /*********暴力枚举直接求********/ static void sg(int n) { for(int j=0;j<=n;j++) SGArray[j]=0; for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) hash[j]=0; for(int j=1;j<16&&fani[j]<=i;j++) { hash[SGArray[i-fani[j]]]=1; } for(int j=0;;j++) { if(hash[j]==0) { SGArray[i]=j; break; } } } } /**********************/ public static void main(String[] str) { Scanner key=new Scanner(System.in); fani[1]=1;fani[2]=2; for(int i=3;i<16;i++) { fani[i]=fani[i-1]+fani[i-2]; // System.out.print(" "+fani[i]); } //System.out.println(); sg(1010); do { int a=key.nextInt(); int b=key.nextInt(); int c=key.nextInt(); if(a==0&&b==0&&c==0)break; int ans=SGArray[a]^SGArray[b]^SGArray[c]; if(ans==0) System.out.println("Nacci"); else System.out.println("Fibo"); }while(true); } }
相关文章推荐
- 用批处理解决数学问题的代码第1/4页
- 无限循环小数
- 数学书籍备忘
- 建立以人为本的数学课程观
- 文兴小学2008-2009学年度第一学期数学科教学计划
- 一生受用的数学公式
- oracle中行列转换
- 数学猜想
- 世界第一数学强校的背后
- 数学是一种思考方式
- 【巧用数学面板达成书写表达式】
- 迭代法
- 想爬得更高,需要知道的数学体系
- 编程需要懂多少数学知识?
- 在用户目录下安装GSL
- 考拉兹猜想
- D-separation 2013/4/21 0:59
- 三角函数
- 机器学习的数学基础 1. 共轭先验 Conjugate Prior
- TopCoder SRM 569 DIV2 Level3: MegaFactorialDiv2