**链接:****传送门 **

题意:裸卡特兰数,但是必须用大数做

balabala:上交高精度模板题,增加一下熟悉度


/*************************************************************************
> File Name: hdu1023.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月11日 星期四 19时25分09秒
************************************************************************/ #include<bits/stdc++.h>
using namespace std; const int maxlen = 10000;
class HP{ public:
int len , s[maxlen];
HP(){ (*this) = 0; };
HP(int inte){ (*this) = inte; }; HP(const char *str){ (*this)=str; };
friend ostream & operator<<(ostream &cout,const HP &x);
HP operator = (int inte); HP operator = (const char*str);
HP operator * (const HP &b); HP operator - (const HP &b);
HP operator / (const HP &b); int Compare (const HP &b);
HP operator + (const HP &b);
};
ostream& operator <<(ostream & cout,const HP &x){
for(int i=x.len ; i>=1 ; i--) cout<<x.s[i]; return cout;
}
HP HP::operator = (const char *str){
len = strlen(str);
for(int i=1;i<=len;i++) s[i] = str[len-i]-'0';
return *this;
}
HP HP::operator = (int inte){
if(inte==0){ len = 1; s[1] = 0; return(*this); };
for(len = 0;inte>0;){ s[++len]=inte%10; inte/=10; };
return (*this);
}
HP HP::operator * (const HP &b){
int i,j;
HP c;
c.len = len + b.len;
for(i=1;i<=c.len;i++) c.s[i] = 0;
for(i=1;i<=len;i++) for(j=1;j<=b.len;j++) c.s[i+j-1] += s[i]*b.s[j];
for(i=1;i<c.len;i++){ c.s[i+1] += c.s[i]/10; c.s[i] %= 10; };
while(c.s[i]) { c.s[i+1] = c.s[i]/10 ; c.s[i] %= 10 ; i++; }
while(i>1 && !c.s[i]) i--; c.len = i;
return c;
}
HP HP::operator - (const HP &b){
int i,j; HP c;
for(i=1,j=0;i<=len;i++){
c.s[i] = s[i] - j; if(i<=b.len) c.s[i] -= b.s[i];
if(c.s[i]<0){ j=1; c.s[i]+=10; } else j = 0;
}
c.len = len; while(c.len>1 && !c.s[c.len]) c.len--;
return c;
}
int HP::Compare(const HP &y){
if(len>y.len) return 1;
if(len<y.len) return -1;
int i = len;
while( (i>1)&&( s[i]==y.s[i] ) ) i--;
return s[i]-y.s[i];
}
HP HP::operator / (const HP &b){
int i,j; HP d(0),c;
for(i=len;i>0;i--){
if( !(d.len==1 && d.s[1]==0) )
{ for( j = d.len; j>0;j--) d.s[j+1] = d.s[j]; ++d.len; }
d.s[1] = s[i]; c.s[i] = 0;
while( (j=d.Compare(b))>=0 )
{ d = d-b; c.s[i]++; if(j==0) break; }
}
c.len = len; while( (c.len>1)&&(c.s[c.len]==0) ) c.len--;
return c;
}
HP HP::operator + (const HP &b){
int i; HP c; c.s[1] = 0;
for(i = 1; i<=len || i<=b.len || c.s[i]; i++ ){
if( i<=len ) c.s[i] += s[i];
if( i<=b.len ) c.s[i] += b.s[i];
c.s[i+1] = c.s[i]/10; c.s[i] %= 10;
}
c.len = i-1; if( c.len == 0 ) c.len = 1;
return c;
}
int main(){
HP h[102];
h[0] = h[1] = 1;
for(int i=2;i<=100;i++){
for(int j=0;j<i;j++){
h[i] = h[i] + (h[j]*h[i-1-j]);
}
}
int n;
while(~scanf("%d",&n)){
cout<<h[n]<<endl;
}
return 0;
}

HDU 1023 Train Problem II( 大数卡特兰 )的更多相关文章

  1. HDU 1023 Train Problem II 大数打表Catalan数

    一个出栈有多少种顺序的问题.一般都知道是Catalan数了. 问题是这个Catalan数非常大,故此须要使用高精度计算. 并且打表会速度快非常多.打表公式要熟记: Catalan数公式 Cn=C(2n ...

  2. HDU 1023 Train Problem II (大数卡特兰数)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. hdu 1023 Train Problem II

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1212 Train Problem II Description As we all know the ...

  4. 1023 Train Problem II(卡特兰数)

    Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want ...

  5. HDU 1023 Train Problem II (卡特兰数,经典)

    题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...

  6. Train Problem II(卡特兰数 组合数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023 Train Problem II Time Limit: 2000/1000 MS (Java/ ...

  7. Train Problem II(卡特兰数+大数乘除)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. Train Problem II (卡特兰数+大数问题)

    卡特兰数: Catalan数 原理: 令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) ...

  9. HDOJ 1023 Train Problem II 卡特兰数

    火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...

随机推荐

  1. 实验二:编写输出"Hello World!"

    1.首先打开eclipse这个软件,新建Java项目,执行“文件→ 新建→Java项目 ”菜单命令,打开新建Java对话框,在项目名的编辑框中输入项目名编写输出"Hello World!”, ...

  2. 使用kubeadm在CentOS上搭建Kubernetes1.14.3集群

    练习环境说明:参考1 参考2 主机名称 IP地址 部署软件 备注 M-kube12 192.168.10.12 master+etcd+docker+keepalived+haproxy master ...

  3. Acdream A - Unique Attack

    A - Unique Attack Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)   ...

  4. HDU 3567 Eight II

    Eight II Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 3 ...

  5. Tsinsen A1206. 小Z的袜子

    /* Tsinsen A1206. 小Z的袜子 http://www.tsinsen.com/new/A1206 BZOJ 2038: [2009国家集训队]小Z的袜子(hose) http://ww ...

  6. BA-强强联手江森自控携手日立空调(转载)

    文章出处:http://www.aircon.com.cn   2014年1月6日   艾肯空调制冷网 江森真是非常擅长资本运作,也对技术前沿定义的很明白,快速获得技术靠资本也考内力,内化后就开始市场 ...

  7. [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description ...

  8. 防止 Chrome 屏蔽 非官方 扩展程序 教程(二)

    说明 前面介绍过一篇通过开发人员模式载入扩展程序的方法,尽管能够正常使用,可是每次又一次打开 Chrome 都会弹出询问窗体,比較麻烦.这里介绍第二种防止屏蔽的方法.与前一种方法相比,尽管应用的步骤多 ...

  9. 深入理解Oracle索引(1):INDEX SKIP SCAN 和 INDEX RANGE SCAN

    ㈠ Index SKIP SCAN                当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS       ...

  10. 杂项-分布式:Hadoop

    ylbtech-杂项-分布式:Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和 ...