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

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

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. vue-cli 中eslint代码检查之过滤指定文件

    在需要过滤的文件头部末尾分别添加:/* eslint-disable */,/* eslint-disable no-new */

  2. 51nod-完美字符串(贪心)

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...

  3. xunsearch实战经验总结

    一.定义好配置文件(非常关键) a):如果需要做精确搜索建议对字段设定index=self,tokenizer = full,不然xunsearch会对字段做分词处理: b):数字区间搜索需设定 ty ...

  4. alsa文章

    http://blog.csdn.net/azloong/article/details/6140824 http://blog.csdn.net/tianshuai1111/article/deta ...

  5. rtsp://192.168.1.198:554/PSIA/streaming/channels/101

    rtsp://192.168.1.198:554/PSIA/streaming/channels/101 Playing rtsp://192.168.1.198:554/PSIA/streaming ...

  6. Java基础学习总结(35)——Java正则表达式详解

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu  ...

  7. apache 与 nginx的区别

    Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apa ...

  8. rabbitMQ学习笔记(六) topic类型消息。

    上一节中使用了消息路由,消费者可以选择性的接收消息. 但是这样还是不够灵活. 比如某个消费者要订阅娱乐新闻消息 . 包括新浪.网易.腾讯的娱乐新闻.那么消费者就需要绑定三次,分别绑定这三个网站的消息类 ...

  9. disruptor实操作手冊(二)

    多消费者场景 上一篇文章介绍了怎样构建一个简单的disruptorproject之后.应该有相当一部分客官骂娘了,确实这种范例在其他地方多的是. 从这篇開始,介绍一些不一样的东西. 一,多个消费者: ...

  10. 运行shell命令

    首先将shell命令命名为.sh文件 将上面的代码保存为test.sh.并 cd 到对应文件夹: chmod +x ./test.sh #使脚本具有运行权限 ./test.sh #运行脚本 假设报错/ ...