HDU 1023 Train Problem II( 大数卡特兰 )
**链接:****传送门 **
题意:裸卡特兰数,但是必须用大数做
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( 大数卡特兰 )的更多相关文章
- HDU 1023 Train Problem II 大数打表Catalan数
一个出栈有多少种顺序的问题.一般都知道是Catalan数了. 问题是这个Catalan数非常大,故此须要使用高精度计算. 并且打表会速度快非常多.打表公式要熟记: Catalan数公式 Cn=C(2n ...
- HDU 1023 Train Problem II (大数卡特兰数)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1023 Train Problem II
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1212 Train Problem II Description As we all know the ...
- 1023 Train Problem II(卡特兰数)
Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want ...
- HDU 1023 Train Problem II (卡特兰数,经典)
题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...
- Train Problem II(卡特兰数 组合数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023 Train Problem II Time Limit: 2000/1000 MS (Java/ ...
- Train Problem II(卡特兰数+大数乘除)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 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) ...
- HDOJ 1023 Train Problem II 卡特兰数
火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...
随机推荐
- 实验二:编写输出"Hello World!"
1.首先打开eclipse这个软件,新建Java项目,执行“文件→ 新建→Java项目 ”菜单命令,打开新建Java对话框,在项目名的编辑框中输入项目名编写输出"Hello World!”, ...
- 使用kubeadm在CentOS上搭建Kubernetes1.14.3集群
练习环境说明:参考1 参考2 主机名称 IP地址 部署软件 备注 M-kube12 192.168.10.12 master+etcd+docker+keepalived+haproxy master ...
- Acdream A - Unique Attack
A - Unique Attack Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- HDU 3567 Eight II
Eight II Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 3 ...
- Tsinsen A1206. 小Z的袜子
/* Tsinsen A1206. 小Z的袜子 http://www.tsinsen.com/new/A1206 BZOJ 2038: [2009国家集训队]小Z的袜子(hose) http://ww ...
- BA-强强联手江森自控携手日立空调(转载)
文章出处:http://www.aircon.com.cn 2014年1月6日 艾肯空调制冷网 江森真是非常擅长资本运作,也对技术前沿定义的很明白,快速获得技术靠资本也考内力,内化后就开始市场 ...
- [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)
Color Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7630 Accepted: 2507 Description ...
- 防止 Chrome 屏蔽 非官方 扩展程序 教程(二)
说明 前面介绍过一篇通过开发人员模式载入扩展程序的方法,尽管能够正常使用,可是每次又一次打开 Chrome 都会弹出询问窗体,比較麻烦.这里介绍第二种防止屏蔽的方法.与前一种方法相比,尽管应用的步骤多 ...
- 深入理解Oracle索引(1):INDEX SKIP SCAN 和 INDEX RANGE SCAN
㈠ Index SKIP SCAN 当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS ...
- 杂项-分布式:Hadoop
ylbtech-杂项-分布式:Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和 ...