题目描述
以树屋高度为4尺、阶梯高度N=3尺为例,小龙一共有如图1.2所示的5种
搭 建方法:
输入
一个正整数 N(1≤N≤500),表示阶梯的高度
输出
一个正整数,表示搭建方法的个数。(注:搭建方法个数可能很大。)
样例输入
样例输出
提示
1 ≤N≤500
设f[i]表示n=i时的答案,考虑这样一种构造方法:
在n阶阶梯的左上角放一个i阶阶梯,右下角放一个n-i-1阶阶梯,剩下的部分用一个大矩形补上,这样恰好用了n个矩形
那么f[n]=f[0]*f[n-1]+f[1]*f[n-2]+……+f[n-2]*f[1]+f[n-1]*f[0]
这个就是卡特兰数的递推式!
因为没有模数,所以要高精度。
将卡特兰数用组合数的通项公式表示,枚举每个质因子在分子和分母分别出现几次,用分子的减去分母的,剩下的就是一个高精乘低精。
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
struct miku
{
int len;
int a[10010];
};
int n;
miku multiply(miku x,int y)
{
miku z;
for(int i=1;i<=x.len;i++)
{
z.a[i]=x.a[i]*y;
}
for(int i=2;i<=x.len;i++)
{
z.a[i]+=z.a[i-1]/10;
z.a[i-1]%=10;
}
z.len=x.len;
while(z.a[z.len]>10)
{
z.len++;
z.a[z.len]+=z.a[z.len-1]/10;
z.a[z.len-1]%=10;
}
return z;
}
miku divide(miku x,int y)
{
miku z;
int res=0;
for(int i=x.len;i>=1;i--)
{
res=res*10+x.a[i];
z.a[i]=res/y;
res%=y;
}
z.len=x.len;
while(z.a[z.len]==0)
{
z.len--;
}
return z;
}
int main()
{
scanf("%d",&n);
miku ans;
ans.len=1;
ans.a[1]=1;
for(int i=n+2;i<=2*n;i++)
{
ans=multiply(ans,i);
}
for(int i=1;i<=n;i++)
{
ans=divide(ans,i);
}
for(int i=ans.len;i>=1;i--)
{
printf("%d",ans.a[i]);
}
}
BZOJ2822[AHOI2012]树屋阶梯——卡特兰数+高精度的更多相关文章
-
bzoj3907 网格 &; bzoj2822 [AHOI2012]树屋阶梯——卡特兰数+高精度
题目:bzoj3907:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 bzoj2822:https://www.lydsy.com/Jud ...
-
BZOJ2822:[AHOI2012]树屋阶梯(卡特兰数,高精度)
Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...
-
bzoj2822[AHOI2012]树屋阶梯(卡特兰数)
2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 879 Solved: 513[Submit][Status] ...
-
[bzoj2822][AHOI2012]树屋阶梯 (卡特兰数+分解质因数+高精度)
Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...
-
bzoj 3907 网格 bzoj2822 [AHOI2012]树屋阶梯——卡特兰数(阶乘高精度模板)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3907 https://www.lydsy.com/JudgeOnline/problem.p ...
-
BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
2822: [AHOI2012]树屋阶梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 779 Solved: 453[Submit][Status] ...
-
bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数
因为规定n层的阶梯只能用n块木板 那么就需要考虑,多出来的一块木板往哪里放 考虑往直角处放置新的木板 不管怎样,只有多的木板一直扩展到斜边表面,才会是合法的新状态,发现,这样之后,整个n层阶梯就被分成 ...
-
P2532 [AHOI2012]树屋阶梯 卡特兰数
这个题是一个卡特兰数的裸题,为什么呢?因为可以通过划分来导出递推式从而判断是卡特兰数,然后直接上公式就行了.卡特兰数的公式见链接. https://www.luogu.org/problemnew/s ...
-
【BZOJ 2822】[AHOI2012]树屋阶梯 卡特兰数+高精
这道题随便弄几个数就发现是卡特兰数然而为什么是呢? 我们发现我们在增加一列时,如果这一个东西(那一列)他就一格,那么就是上一次的方案数,并没有任何改变,他占满了也是,然后他要是占两格呢,就是把原来的切 ...
随机推荐
-
loopback文档翻译
最近在学习loopback,期间在strongloop的官网翻译了部分文章. 见:https://docs.strongloop.com/pages/viewpage.action?pageId=60 ...
-
Ajax的使用
Ajax是JQuery实现XMLHttpRequest的一种方式. 增加HTML5按钮,含有点击事件: <button type="button" class="b ...
-
获取腾讯soso地图坐标代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
-
《11招玩转网络安全》之第一招:Docker For Docker
玩转黑客那些工具,缺少了虚拟机怎么行,除了用虚拟机虚拟整个系统,Docker也不能缺少,读者只需要知道,Docker只虚拟Linux系统中的某个程序就可以了.本节就来介绍Linux下安装设置Docke ...
-
CSS 样式中的两个方法
在很多时候,我们需要LI开头空一点距离.结尾不能再有下划线了.这个效果在以前是很难实现的.但是有了下面两个选择器,非常容易做出这种东西. .slideTxtBox .bd ul > :first ...
-
memcached优化方案实例
<?php //引入memcached require_once '../class/memcached.class.php'; //连接MySQL $link = mysqli_connect ...
-
python 小白学习(1)
自定义错误类型 class XxxError(Exception): def __init__(self , message): self = Exception("xxxxx") ...
-
js 数组的crud操作
增加push(); 向数组尾添加元素unshift(); 向数组头添加元素向数组指定下标添加元素:可以用Array提供的splice(); var arr = ['a','b','c']; arr.s ...
-
模拟时钟(AnalogClock)
模拟时钟(AnalogClock) 显示一个带时钟和分针的表面 会随着时间的推移变化 常用属性: android:dial 可以为表面提供一个自定义的图片 下面我们直接看代码: 1.Activity ...
-
编写3ds max插件时遇到的问题总结
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 这几天在给公司的美术编写3ds max 2009使用的插件,遇到了一些问题,在此记录一下解 ...