HDU 1023 Train Problem II (卡特兰数,经典)
题意:
给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列。
思路:
卡特兰数的经典例子。n<101,用递推式解决。需要使用到大数。n=100时大概有200位以下。
#include <bits/stdc++.h>
using namespace std;
const int N=;
vector<string> vect;
void _mult(string num1, string num2, string &result )
{
reverse(num1.begin(),num1.end()); //反转
reverse(num2.begin(),num2.end());
result="";
int i, j, re_int[]; //********这里的150是位数,根据需要可以增大或减小*********
memset(re_int, , sizeof(re_int));
for(i=; i<num1.length(); i++) //两串作乘法,结果存放于re_int数组中, 最多可达150位!
for(j=; j<num2.length(); j++)
re_int[i+j] += ((num1[i]-) * (num2[j]-));
int jinwei=, zhi;
for(i=; i<num1.length()+num2.length(); i++) //单独处理进位问题,上一步中的数组每个元素都有可能超过10的,所以没处理进位
{
zhi = re_int[i]+jinwei;
re_int[i] = zhi%;
jinwei = zhi/;
}
for(i=num1.length()+num2.length()-; i>=; i--) //将i打个标记,数组re_int的前面部分可能全0,要去掉
if(re_int[i]!=) break;
for(;i>=;i--) //将整型数组转成字符串
result = result+(char)(re_int[i]+);
if(result=="") //若结果还是空,乘法的结果是0?
result="";
}
void div(char * src,int n,char *dest)
{
int len = strlen(src),i,k,t=,s=;
bool flag = true; //商是否有了第一个有效位,防止商首部一直出现0
for(i=,k=; i<len; i++)
{
t = s*+(src[i]-); //新余数
if(t/n> || t==) //余数为0要修改商
{
dest[k++] = t/n+,s = t%n,flag = false;
}
else //不够除,修改余数
{
s = t;
if(!flag) //商已经有有效位了,补零
dest[k++] = '';
}
}
dest[k]='\0';
} void precal()
{
string s="";
vect.push_back(s);
vect.push_back(s);
char c[], dest[];
for(int i=; i<; i++)
{
string q1="",res;
int a=*i-; //第一个括号
while(a)
{
q1+=(a%+'');
a/=;
}
reverse(q1.begin(),q1.end());
_mult(q1,vect[i-],res); //乘法
strcpy(c,res.c_str());
div(c,i+,dest); //除法
s=dest;
vect.push_back(dest);
}
}
int main()
{
//freopen("e://input.txt", "r", stdin);
int n;
precal();
while(~scanf("%d", &n))
cout<<vect[n]<<endl;
return ;
}
AC代码
HDU 1023 Train Problem II (卡特兰数,经典)的更多相关文章
- HDOJ 1023 Train Problem II 卡特兰数
火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...
- 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 ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
- HDU 1023 Train Problem II( 大数卡特兰 )
链接:传送门 题意:裸卡特兰数,但是必须用大数做 balabala:上交高精度模板题,增加一下熟悉度 /************************************************ ...
- C - Train Problem II——卡特兰数
题目链接_HDU-1023 题目 As we all know the Train Problem I, the boss of the Ignatius Train Station want to ...
- HDU-1023 Train Problem II 卡特兰数(结合高精度乘除)
题目链接:https://cn.vjudge.net/problem/HDU-1023 题意 卡特兰数的应用之一 求一个长度为n的序列通过栈后的结果序列有几种 思路 一开始不知道什么是卡特兰数,猜测是 ...
- HDU 1023 Train Problem II 大数打表Catalan数
一个出栈有多少种顺序的问题.一般都知道是Catalan数了. 问题是这个Catalan数非常大,故此须要使用高精度计算. 并且打表会速度快非常多.打表公式要熟记: Catalan数公式 Cn=C(2n ...
- 1023 Train Problem II(卡特兰数)
Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want ...
随机推荐
- sql连接字符串的方法
----乌龟代码---合并列值 --********************************************************************************** ...
- 控制台应用程序的Main方法
总结一下Main方法规则: 1.Main 方法名大小写有规范. 2.Main 方法返回类型只有 void.int两种返回类型. 3.Main 方法的参数可以是string[] args,也可以为空,只 ...
- js对象小结
前奏 对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象.js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以 ...
- 数论之高次同余方程(Baby Step Giant Step + 拓展BSGS)
什么叫高次同余方程?说白了就是解决这样一个问题: A^x=B(mod C),求最小的x值. baby step giant step算法 题目条件:C是素数(事实上,A与C互质就可以.为什么?在BSG ...
- Java 获取本机IP
import java.io.*; import java.util.*; import java.net.*; public class GetIP { public static void mai ...
- Project Euler 109 :Darts 飞镖
Darts In the game of darts a player throws three darts at a target board which is split into twenty ...
- linux下tomcat下部署项目如何打包压缩备份
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩![root ...
- iOS开发swift--函数
函数返回值 ---函数 // 自加函数 func Add(num : Int)->Int{ } //自减函数 func zj(num : Int)->Int{ } //定义返回函数类型 f ...
- STM32的GPIO口的输出开漏输出和推挽输出
本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...
- 【总结】你所不知道的Java序列化
我们都知道,Java序列化可以让我们记录下运行时的对象状态(对象实例域的值),也就是我们经常说的对象持久化 .这个过程其实是非常复杂的,这里我们就好好理解一下Java的对象序列化. 1. 首先我们要搞 ...