码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)

时间:2017-08-26 19:39:11      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:image   mem   string   描述   clu   ges   tool   hold   struct   

P2532 [AHOI2012]树屋阶梯

题目描述

 

技术分享

技术分享

输入输出格式

输入格式:

 

一个正整数N(1<=N<=500),表示阶梯的高度。

 

输出格式:

 

一个正整数,表示搭建方法的个数。(注:搭建方法的个数可能很大)

 

输入输出样例

输入样例#1:
3
输出样例#1:
5

说明

40%的数据:1<=N<=20

80%的数据:1<=N<=300

100%的数据:1<=N<=500

/*
    Catalan数套个高精
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[1010],b[1010];
struct node{
    int len,zu[1010];
    node operator * (const int x)const{
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        node res;res.len=0;
        int l=len;
        for(int i=1,j=l;i<=l;i++,j--)a[i]=zu[j];
        for(int i=1;i<=l;i++){
            b[i]+=a[i]*x;
            b[i+1]+=b[i]/10;
            b[i]=b[i]%10;
        }
        while(b[l+1]){
            l++;
            b[l+1]=b[l]/10;
            b[l]%=10;
        }
        res.len=l;
        for(int i=1,j=l;i<=l;i++,j--){
            res.zu[i]=b[j];
        }
        return res;
    }
    node operator / (const int x)const{
        memset(a,0,sizeof(a));
        node res;res.len=0;
        int y=0;
        for(int i=1;i<=len;i++){
            a[i]=(y*10+zu[i])/x;
            y=(y*10+zu[i])-a[i]*x;
        }
        int s=1;
        while(!a[s])s++;
        for(int i=s;i<=len;i++)res.zu[++res.len]=a[i];
        return res;
    }
}h[510];
int main(){
    int n;
    scanf("%d",&n);
    h[0].len=1;h[0].zu[1]=1;
    for(int i=1;i<=n;i++){
        h[i]=h[i-1]*(4*i-2)/(i+1);
    }
    for(int i=1;i<=h[n].len;i++)printf("%d",h[n].zu[i]);
    return 0;
}

 

洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)

标签:image   mem   string   描述   clu   ges   tool   hold   struct   

原文地址:http://www.cnblogs.com/thmyl/p/7435947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!