HDU1023 Train Problem II【Catalan数】
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1023
题目大意:
一列N节的火车以严格的顺序到一个站里。问出来的时候有多少种顺序。
解题思路:
典型的求Catalan数的题目,可是结果会非常大,所以须要用大数来解决。
Catalan公式为 h(n) = h(n-1) * (4*n-2) / (n + 1),h(0) = h(1) = 1。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 100;
const int BASE = 10000; void Multiply(int A[], int Max, int b) //大数乘法 A[]*b 10000进制
{
int Array = 0;
for(int i = Max - 1; i >= 0; --i)
{
Array += b * A[i];
A[i] = Array % BASE;
Array /= BASE;
}
} void Divide(int A[], int Max, int b) //大数除法 A[]/b 10000进制
{
int Div = 0;
for(int i = 0; i < Max; ++i)
{
Div = Div * BASE + A[i];
A[i] = Div / b;
Div %= b;
}
} int A[MAXN+10][MAXN+10]; int main()
{
memset(A,0,sizeof(A));
A[1][99] = 1;
for(int i = 2; i < 101; ++i)
{
for(int j = 0; j < 100; ++j)
A[i][j] = A[i-1][j];
Multiply(A[i], MAXN, 4*i-2);
Divide(A[i], MAXN, i+1);
}
int N;
while(~scanf("%d",&N) && N != -1)
{
int i;
for(i = 0; i < MAXN && A[N][i] == 0; ++i); //去掉数组前导0
printf("%d",A[N][i++]); //输出第一个非0数
for(; i < MAXN; ++i) //输出后边的数,每位保持4位长度
printf("%04d",A[N][i]);
printf("\n");
}
return 0;
}
HDU1023 Train Problem II【Catalan数】的更多相关文章
- HDU-1023 Train Problem II 卡特兰数(结合高精度乘除)
题目链接:https://cn.vjudge.net/problem/HDU-1023 题意 卡特兰数的应用之一 求一个长度为n的序列通过栈后的结果序列有几种 思路 一开始不知道什么是卡特兰数,猜测是 ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
- ACM学习历程—HDU1023 Train Problem II(递推 && 大数)
Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know ...
- C - Train Problem II——卡特兰数
题目链接_HDU-1023 题目 As we all know the Train Problem I, the boss of the Ignatius Train Station want to ...
- HDOJ 1023 Train Problem II 卡特兰数
火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...
- HDU 1023 Train Problem II (卡特兰数,经典)
题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...
- (母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1023 Train Problem II (大数卡特兰数)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Train Problem II(卡特兰数+大数乘除)
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- Object-C,遍历目录
最近武汉连续下雨很多天,降温了2次,温度一下子由28度到14度,再到8度,手太冷了. 加上最近发生了一些比较棘手的家庭琐事,最近没心情继续学习Object-C. 后来,我想明白了,心情不好的时候,还是 ...
- traits的介绍
traits基本利用了上一篇文章的思想,通过局部特化,来返回针对特定类型的信息. 可以自己实现traits,约定俗成了,返回特性信息. 也可以利用iterator的traits信息. iterator ...
- Centos7 zabbix3.4.6的安装部署 (一)
部署zabbix主要为了监控日常主机.服务器.Web服务器.数据库.路由器.交换机等日常设备,功能强大,稳定性好 现在通过使用虚拟机VM搭建的Centos7部署zabbix服务 实现简单监控功能 本章 ...
- Python(六) Python 函数
一.认识函数 help(方法名字) help(round) 1.功能性 2.隐藏细节 3.避免编写重复的代码 4.组织代码 自定义函数 二.函数的定义及运行特点 # 递归 def sum_num(n ...
- C++ new 的用法
原文链接:http://www.builder.com.cn/2008/0104/696370.shtml “new”是C++的一个关键字,同时也是操作符.关于new的话题非常多,因为它确实比较复杂, ...
- VirtualBox内刚刚安装完Debian9系统,也无法设置共享文件夹。解决的方法就是安装VirtualBox客户端增强包。
VirtualBox内刚刚安装完Debian9系统,也无法设置共享文件夹.解决的方法就是安装VirtualBox客户端增强包. 1.若直接安装客户端增强包会得到如下提示:root@debian:/op ...
- Zabbix钉钉小机器人报警
1.下载钉钉所需要的脚本golang-zabbix-robot-64,浏览器访问https://www.appgao.com/files/192.html: 图一 脚本下载 2.将脚本路径添加到 ...
- Linux Mint 19.1将采用新的桌面布局
我们期待Linux Mint 19.1的发布在圣诞节假期之前到来,希望它会带来一些惊喜. Linux 19.1版本将默认包含Cinnamon 4.0桌面环境,Mint的开发人员说,这将比现在“看起来更 ...
- 初尝Perl -- 使用aapt给apk软件包批量重命名
不知道什么是Perl猛戳这个链接 http://zh.wikipedia.org/wiki/Perl 任务: 随着手机/平板的各方面性能的不断发展(CPU,内存 ...
- 【Codeforces Round #460 (Div. 2) C】 Seat Arrangements
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用pre[i][j]表示第i行前j列的和. 然后枚举连续座位的最左上点. (有两种可能向右或向下k个. 则还需要处理出pre2[i] ...