设为首页 加入收藏

TOP

(step8.2.6)hdu 1848(Fibonacci again and again――组合博弈)
2014-11-23 21:46:34 来源: 作者: 【 】 浏览:3
Tags:step8.2.6 hdu 1848 Fibonacci again and 组合 博弈
题目大意:输入3个整数m,n,p,分别表示3堆石头中的石头个数
解题思路:
1)斐波那契数列的第16个数fib[16] == 1597
2)(sg[m]^sg[n]^sg[p]) 。一定要加括号,否则会WA
代码如下:
/* 
 * 1848_1.cpp 
 * 
 *  Created on: 2013年9月1日 
 *      Author: Administrator 
 */  
  
#include   
  
  
using namespace std;  
  
const int maxn = 1001;  
int sg[maxn];  
int f[maxn];  
int hash[maxn];  
  
void getSG(int n){  
  
    int i,j;  
    memset(sg,0,sizeof(sg));  
    for(i = 1 ; i<= n ; ++i){  
        memset(hash,0,sizeof(hash));  
        for(j = 1 ; f[j] <= i ; ++j ){  
            hash[sg[i-f[j]]] = 1;  
        }  
  
        for(j = 0 ; j <= n ; ++j){  
            if(hash[j] == 0){  
                sg[i] = j;  
                break;  
            }  
        }  
    }  
}  
  
int main(){  
    int m,n,p;  
  
    f[0] = 1;  
    f[1] = 1;  
    int i ;  
    for(i = 2 ; i <= 16 ; ++i){//这里之所以取16是因为fib[16] 已经是 1597,已经大于n的最大值  
        f[i] = f[i - 1] + f[i - 2];  
    }  
    getSG(1000);  
    while(scanf("%d%d%d",&m,&n,&p)!=EOF,m||n||p){  
        if((sg[m]^sg[n]^sg[p]) == 0){//sg[m]^sg[n]^sg[p]外面别忘了加括号(),否则会WA  
            printf("Nacci\n");  
        }else{  
            printf("Fibo\n");  
        }  
    }  
}  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇130831组队赛-Regionals 2011, As.. 下一篇hdu - 3572 - Task

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·深入理解 Java 集合 (2025-12-27 07:22:48)
·Java集合框架全面解 (2025-12-27 07:22:45)
·时隔 15 年,巨著《J (2025-12-27 07:22:43)
·定义一个类模板并实 (2025-12-27 06:52:28)
·一文搞懂怎么用C语言 (2025-12-27 06:52:25)