比赛 20111108 评测结果 AAAWWWWWWW
题目名称 分裂 最终得分 30
用户昵称 fanzeyi 运行时间 0.000 s
代码语言 C 内存使用 0.00 MiB
提交时间 2011-11-08 12:30:44
显示代码纯文本
/*
ID: fanzeyi1
LANG: C
TASK: mushroom 
*/
/*
 * =====================================================================================
 *
 *       Filename:  mushroom.c
 *        Version:  1.0
 *        Created:  11/08/2011 09:43:17 AM
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:  Zeray Fan, fanzeyi1994[at]gmail.com
 *        Company:  http://www.fanhe.org/
 *
 * =====================================================================================
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned long long mushroom[2][20000]; 

int main(void) {
    FILE *fin = fopen("mushroom.in","r");
    FILE *fout = fopen("mushroom.out", "w");
    int i; 
    int n;
    int max;
    int tmp; 
    int time;
    unsigned long long result; 
    fscanf(fin, "%d", &n); 
    max = 2; 
    memset(mushroom, 0, sizeof(mushroom)); 
    mushroom[0][2] = 1; 
    for( time = 0 ; time < n ; time++ ) {
        tmp = max; 
        memset(mushroom[(time&1)^1], 0, sizeof(mushroom[0])); 
        for( i = 1 ; i <= max ; i++ ) {
            if(i == 1 && mushroom[time&1][i]) {
                mushroom[(time&1)^1][2] += mushroom[time&1][1]; 
                continue; 
            }
            if(mushroom[time&1][i]) {
                mushroom[(time&1)^1][i+1] += mushroom[time&1][i]; 
                mushroom[(time&1)^1][i-1] += mushroom[time&1][i]; 
                if(i + 1 > tmp) {
                    tmp = i + 1; 
                }
            }
        }
        max = tmp; 
    }
    result = 0; 
    for( i = 1 ; i <= max ; i++ ) {
        result = result + mushroom[(n&1)^1][i]; 
    }
    fprintf(fout, "%llu\n", result); 
    return 0;
}