vijosP1388 二叉树数
vijosP1388 二叉树数
【思路】
Catalan数。根据公式h=C(2n,n)/(n+1)计算。首先化简为 (n+i)/i的积(1<=i<=n)
法一:
高精单精乘除。
法二:
唯一分解定理。将乘除操作转化为对质因子指数的加减,最后用高精单精乘起来。类于vijosP1137 组合数一题
【代码1】439ms
#include<iostream>
#include<cstring>
using namespace std; struct Bign {
int len;
long long N[];
Bign() {
memset(N,,sizeof(N));
}
}; int n; void multi(Bign& a,int x)
{
for(int j=;j<a.len;j++) a.N[j] *= x;
int i=;
while(i<a.len || a.N[i]>) {
a.N[i+] += a.N[i]/;
a.N[i] %= ;
i++; //i++
}
if(a.N[i]) a.len=i+; //判断
else a.len=i;
} void div(Bign& a,int x) {
for(int i=a.len-;i>;i--) { //由高位到低位
a.N[i-] += a.N[i]%x*;
a.N[i] /= x;
}
a.N[]/=x; //最后一位
while(a.N[a.len-]==) a.len--; //删除前导0
} int main() {
cin>>n;
Bign ans;
ans.len=; ans.N[]=;
for(int i=;i<=n;i++) {
multi(ans,n+i);
div(ans,i);
}
div(ans,n+);
for(int i=ans.len-;i>=;i--) cout<<ans.N[i];
return ;
}
【代码2】52ms
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std; const int maxn = +;
struct Bign{
int len,N[maxn];
Bign() {
memset(N,,sizeof(N));
}
};
int e[maxn];
int n,m,ans;
vector<int> primes; void get_primes(int n) {
bool su[maxn]; memset(su,true,sizeof(su));
for(int i=;i<=n;i++) if(su[i]) {
primes.push_back(i);
if(i<=sqrt(n)) for(int j=i*i;j<=n;j+=i) su[j]=false;
//i<=sqrt(n) 否则RE
}
} void calc(int x,int d) {
for(int i=;i<primes.size();i++) {
while(x%primes[i]==) {
e[i] += d;
x /= primes[i];
}
if(x==) break;
}
} void multi(Bign& a,int x)
{
for(int j=;j<a.len;j++) a.N[j] *= x;
int i=;
while(i<a.len || a.N[i]>) {
a.N[i+] += a.N[i]/;
a.N[i] %= ;
i++; //i++
}
if(a.N[i]) a.len=i+; //判断
else a.len=i;
} int main() {
cin>>n; get_primes(*n+); for(int i=;i<=n;i++) {
calc(n+i,);
calc(i,-);
}
calc(n+,-);
Bign ans; ans.len=; ans.N[]=;
for(int i=;i<primes.size();i++){
while(e[i]--) multi(ans,primes[i]);
}
for(int i=ans.len-;i>=;i--) cout<<ans.N[i];
return ;
}
vijosP1388 二叉树数的更多相关文章
- leetCode之二叉树数中序遍历(递归实现)
1.题目描述 2.分析 对于树来说,由于其结构是递归定义的,所以对二叉树很多算法使用递归是最容易的.反倒是使用循环方式需要借助特殊的数据结构来实现. 3.代码 vector<int> in ...
- C 封装一个简单二叉树基库
引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而 没有遭受到冷 ...
- leetcode面试准备:Lowest Common Ancestor of a Binary Search Tree & Binary Tree
leetcode面试准备:Lowest Common Ancestor of a Binary Search Tree & Binary Tree 1 题目 Binary Search Tre ...
- 后序线索化二叉树(Java版)
前面介绍了前序线索化二叉树.中序线索化二叉树,本文将介绍后序线索化二叉树.之所以用单独的一篇文章来分析后序线索化二叉树,是因为后序线索化二叉树比前序.中序要复杂一些:另外在复习线索化二叉树的过程中,大 ...
- LeetCode222 Count CompleteTree Nodes(计算全然二叉树的节点数) Java 题解
题目: Given a complete binary tree, count the number of nodes. Definition of a complete binary tree fr ...
- N个节点的二叉树有多少种形态(卡特兰数)
N个节点的二叉树有多少种形态 这是一道阿里的面试题.其实算不上新鲜,但是我之前没关注过,如今碰到了,就顺便探讨下这个问题吧:) 拿到这个题,首先想到的是直接写出表达式肯定不行,所以有必要从递推入手 ...
- C++计算二叉树的节点数和高度
用struct结构体的写法: /* * description: 计算二叉树的层数和节点数 * writeby: nick * date: 2012-10-23 16:16 * */ #include ...
- [Catalan数]1086 栈、3112 二叉树计数、3134 Circle
1086 栈 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 栈是计算机中 ...
- 长沙理工大学第十二届ACM大赛-重现赛 大家一起来数二叉树吧 (组合计数)
大意: 求n结点m叶子二叉树个数. 直接暴力, $dp[i][j][k][l]$表示第$i$层共$j$节点, 共$k$叶子, 第$i$层有$l$个叶子的方案数, 然后暴力枚举第$i$层出度为1和出度为 ...
随机推荐
- SGU 281.Championship
题意: 有n(n≤50000)支队伍参加了两场比赛,分别有两个排名.现在要求输出总排名,如果对任意m,在两个排名的前m个队伍都相同,那么在总排名前m个队伍就是这些队伍.其它情况按字典序排. Solut ...
- Scala - 正则表达式匹配例子
壹Try胜仟言 别忘了 import scala.util.matching._ scala> var s = "a_b_c_d_e"s: String = a_b_c_d_ ...
- C++11中新特性之:unordered_map
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value. 不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的ha ...
- Fedora 17 修改GRUB启动菜单顺序
Fedora 16采用GRUB2,因此启动菜单编辑方式与以前版本有所不同 设置默认启动Windows 1. 首先找到Windows的menuentry # cat /boot/grub2/grub ...
- 非常实用的JQuery的选项卡切换源码
<html> <head> <meta charset="utf-8"> <title>简单选项卡</title> &l ...
- IE11的CSS兼容性问题
最近测试给了我一大堆BUG,一瞅发现全是IE11的.吐槽一下这个浏览器真的比较特立独行.很多默认的样式跟别的浏览器不同,而且最明显的一点应该是padding左右内边距往往比别的浏览器大了一倍.但是当需 ...
- php date('Y')
date('Y')默认是y-12-01 date('Y-01')!!!才是我需要的
- IE6下解决select层级高的问题
div在IE6下无法遮盖select,原因是在IE6下,浏览器将select元素视为窗口级元素,这时div或者其它的普通元素无论z-index设置的多高都是无法遮住select元素的. 解决方法有三种 ...
- tree命令
tree命令以树状图列出目录的内容. 1.语法 tree(选项)(参数) 2.选项 -a:显示所有文件和目录: -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合: -C:在文件和目录清单加 ...
- python入门第一天作业。讲师写的代码。
#!/uer/bin/env python # _*_ coding: utf-8 _*_ import sys retry_limit = 3 retry_count = 0 account_fil ...