zoukankan      html  css  js  c++  java
  • F

    任何一个大学生对菲波那契数列(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函数

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<cmath>
    #include<string.h>
    #include<algorithm>
    #define sf scanf
    #define pf printf
    #define pb push_back
    #define mm(a,b) memset((a),(b),sizeof(a))
    #include<vector>
    typedef long long ll;
    typedef long double ld;
    const ll mod=1e9+7;
    using namespace std;
    const double pi=acos(-1.0);
    int a[50],sg[1005];
    int getsg(int n)
    {
    	int d[100];
    	mm(d,0);int i;
    	for( i=0;a[i]<=n;i++)
    	{
    		d[i]=sg[n-a[i]];
    	}
    	sort(d,d+i);
    	d[i]=1000000000;
    	if(d[0]!=0) return 0;
    	for(int j=0;j<i;j++)
    	{
    		if(d[j+1]-d[j]>1) return d[j]+1;
    	}
    }
    bool judge(int x,int y,int z)
    {
    	if((sg[x]^sg[y]^sg[z])==0) return false;
    	return true;
    }
    int main()
    {
    	a[0]=1,a[1]=2,sg[0]=0,sg[1]=1,sg[2]=2;
    	for(int i=2;i<30;i++)//做斐波拉契数列 
    	{
    		a[i]=a[i-1]+a[i-2];
    	//	cout<<a[i]<<endl;
    	}
    	for(int i=3;i<1005;i++)//做sg序列 
    	{
    		sg[i]=getsg(i);
    	}
    	int a,b,c;
    	while(1)
    	{
    		cin>>a>>b>>c;
    		if(a==0&&b==0&&c==0)return 0;		
    		if(judge(a,b,c))
    		cout<<"Fibo"<<endl;
    		else
    		cout<<"Nacci"<<endl;
    	} 
    
    }
    
  • 相关阅读:
    Asp.net MVC 3 RTM 源代码中单元测试帮助类
    CSharp扩展方法应用之获取特性
    Asp.net MVC中防止HttpPost重复提交
    JQuery实现倒计划按钮
    JQuery防止退格键网页后退
    .net中用Action等委托向外传递参数
    linux shell 用sed命令在文本的行尾或行首添加字符
    MongoDB分片中片键的选择
    Mongodb的Replica Sets + Sharding架构
    Mongodb数据分片的维护
  • 原文地址:https://www.cnblogs.com/wzl19981116/p/9370388.html
Copyright © 2011-2022 走看看