zoukankan      html  css  js  c++  java
  • (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)

    题目大意:输入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 <iostream>
    
    
    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
    ");
    		}else{
    			printf("Fibo
    ");
    		}
    	}
    }
    
    




  • 相关阅读:
    集合模拟斗地主
    泛型
    Iterator迭代器
    嵌入式应用开发过程中用到的函数
    Keil ,source insight使用技巧等
    Socket应用demo 获取IP
    tftp安装、配置,ubuntu联网设置
    C++基础三——类、结构体、联合体
    C++基础二——清华
    STM32笔记
  • 原文地址:https://www.cnblogs.com/james1207/p/3299280.html
Copyright © 2011-2022 走看看