hdu 1848 Fibonacci again and again 博弈论,求出SG函数,,什么问题都没有了

Fibonacci again and again

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5596    Accepted Submission(s): 2354

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

不知道为什么,,一开始在总是wrong,,不知道改了什么,,就A了。。反正我感觉这题很水,,还搞了这么长时间。。

代码:

#include <stdio.h>
#include <string.h>
#define MAX 1010
int fib[30] , sg[MAX];

void getSG()
{
	bool visited[MAX] ;
	for(int i = 1 ; i < MAX ; ++i)
	{
		memset(visited,false,sizeof(visited));
		for(int j = 1 ; i-fib[j] >= 0 ; ++j)
		{
			visited[sg[i-fib[j]]] = true ;
		}
		for(int j = 0 ; j < MAX ; ++j)
		{
			if(!visited[j])
			{
				sg[i] = j ;
				break ;
			}
		}
	}
}

int main()
{
	fib[1] = 1 ,fib[2] = 2 ;
	for(int i = 3 ; i < 30 ; ++i)
	{
		fib[i] = fib[i-1]+fib[i-2] ;
		if(fib[i]>1000)
		{
			break ;
		}
	}
	int m , n , p ;
	getSG() ;
	while(~scanf("%d%d%d",&m,&n,&p) && (m||n||p))
	{
		int ans = sg[m]^sg[n]^sg[p] ;
		if(ans)
		{
			puts("Fibo");
		}
		else
		{
			puts("Nacci") ;
		}
	}
	return 0 ;
}

与君共勉

时间: 2024-12-15 07:15:02

hdu 1848 Fibonacci again and again 博弈论,求出SG函数,,什么问题都没有了的相关文章

hdu 1536 S-Nim 博弈论,,求出SG&#39;函数就可以解决

S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4975    Accepted Submission(s): 2141 Problem Description Arthur and his sister Caroll have been playing a game called Nim for some time now

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

题目链接 //求三堆石子的SG函数,异或起来就是整个游戏的SG值 #include <cstdio> #include <cstring> const int N=1005; int n,m,p,cnt,F[N],sg[N+2]; bool vis[N+2]; void Init() { F[0]=F[1]=1; for(cnt=2; F[cnt-1]<N*2; ++cnt) F[cnt]=F[cnt-2]+F[cnt-1]; for(int i=1; i<N; ++i

HDU - 1848 - 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): 4964    Accepted Submission(s): 2072 Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F

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

Fibonacci again and again Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status 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……就是菲波那契数列. 在

博弈论 SG函数(模板) HDU 1848 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): 9296    Accepted Submission(s): 3893 Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1)=1;F(2)=2;

HDU 1848 Fibonacci again and again(博弈 SG运用)

题目链接: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就是曾经的浙江省赛题. 今天,又一个关于Fi

题解报告:hdu 1848 Fibonacci again and again(尼姆博弈)

题目链接: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就是曾经的浙江省赛题.今天,又一个关于Fibonacc

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题目: 1.  这是一个二人游戏;2.  一共有3堆石子,数量分别是m, n, p个:3.  两人轮流走;4.  每走一步可以选择任意一堆石子,然后取走f个:5.  f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8-等数量):6.  最先取光所有石子的人为胜者:假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢. Input 输入数据包含多个测试用例,每个测试用例占一行,包

HDU 1848 —— Fibonacci again and again 【博弈 sg函数】

Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) 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上