zoukankan      html  css  js  c++  java
  • hdu1848 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就是曾经的浙江省赛题。
    今天,又一个关于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函数。
    对于数据将n,m,k的sg函数异或就好了。
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 #define dbg(x) cout<<#x" = "<<x<<endl
     6 
     7 const int maxn=1005;
     8 
     9 int a,b,c,cnt;
    10 int fib[maxn];
    11 int S[maxn];
    12 int sg[maxn];
    13 
    14 void get_sg(){
    15     fib[1]=1;  fib[2]=2;
    16     for(int i=3;;i++){
    17         fib[i]=fib[i-1]+fib[i-2];
    18         if(fib[i]>1000){
    19             cnt=i;
    20             break;
    21         }
    22     }
    23 //    dbg(cnt);
    24     sg[0]=0;
    25     for(int i=1;i<=1000;i++){
    26         memset(S,0,sizeof S);
    27         for(int j=1;j<=cnt&&fib[j]<=i;j++)
    28             S[sg[i-fib[j]]]=1;
    29         for(int j=0;;j++)
    30             if(!S[j]){
    31                 sg[i]=j;
    32                 break;
    33             }
    34     }
    35 }
    36 
    37 int main(){
    38     get_sg();
    39     while(scanf("%d%d%d",&a,&b,&c),a||b||c){
    40         if(sg[a]^sg[b]^sg[c])  puts("Fibo");
    41         else  puts("Nacci");
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    Cesium中的坐标系及转换
    Cesium Workshop
    window.postMessage 跨窗口,跨iframe javascript 通信
    VUE课程参考---7、跑马灯效果
    VUE课程---9、事件绑定v-on
    VUE课程---8、属性绑定v-bind
    VUE课程---7、解决插值表达式闪烁问题
    小谈chrome调试命令:console.log的使用
    Hadoop平台配置总结
    hadoop 关闭进程时报错no 进程 to stop
  • 原文地址:https://www.cnblogs.com/ZYBGMZL/p/7307329.html
Copyright © 2011-2022 走看看