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)命名. ...
随机推荐
- JTextArea+JScrollPane滚动条自动在最下边(转帖)
这是我制作五子棋的过程中遇到的问题,在网上搜了好几种答案,分别列在下面了.不过感觉第一种相当方便.用得简洁,爽! 1. 利用JTextArea的selectAll();方法在添加信息之后强制将光标移动 ...
- HDU1846 - Brave Game【巴什博弈】
十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻. 今天,大家选 ...
- nyoj125-盗梦空间
盗梦空间 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 <盗梦空间>是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中的时 ...
- 最长上升子序列(LIS)与最长公共子序列(LCS)
1.LIS : 给定一个序列,求它的最长上升子序列(n<=2000) 第一种 O(n^2): dp[i] 为以i为开头的最长上升子序列长度 code1: #include<cstdio&g ...
- vscode快捷键(lua开发)
快速定位行:ctrl+g 查找:ctrl+f 格式化代码:ctrl+alt+f 快速查找到当前复制内容的第一次出现的位置ctrl+d 其他常用不一一列举了
- java的数据的类型
1分类: 基本数据类型长度: Java中简单类型,占用字节数, 以及包装类 浮点数的默认类型是Double(8个字节) 如果想直接想一个变量赋值一个float(4个字节)要在数值后面添加f/F 如同向 ...
- 加速 MySQL 导入导出的方法
http://www.21andy.com/new/20100917/1952.html MySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时.在导出时合理 ...
- ClassNotFoundException和NoClassDefFoundError的差别
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有差别的,我们能够从异常中恢 ...
- 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享
一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...
- Oracle 单表选择率
听了猫大师的课,对Oracle CBO又加深了一步理解: 单表选择率: selectivity=1/ndv*a4nulls ocard来自dba_tables.num_rows ndv 来自dba_t ...