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和出度为 ...
随机推荐
- MongoDB源码分析——mongo与JavaScript交互
mongo与JavaScript交互 源码版本为MongoDB 2.6分支 之前已经说过mongo是MongoDB提供的一个执行JavaScript脚本的客户端工具,执行js其实就是一个js和 ...
- Mantle 简单教程
Mantle可以很方便的去书写一个模型层的代码. 使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现<MTLJSONSerializing>协议) ...
- jQuery弹出层_点击自身以外地方关闭弹出层
<html> <style> .hide{display:none;} </style> <script type="text/javascript ...
- setTimeout和setInterval的深入理解
以前写的setTimeout和setInterval的文章有些不足之处,今天抽时间整理了一下,要想真正理解还得从javascript的单线程机制说起 大概半年前发表过一篇关于setTimeout和se ...
- 安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined
安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined 出现这种错误是因为主机名和/etc/host ...
- Android中的pix,sp,dp相关概念
px( pixel) 像素,可以简单的理解为一个点或方块,用以颜色的显示(单位),一般指印刷品或屏幕设置设备的颜色显示定义. dip(device independent pixels)设备独立像素. ...
- C#网页自动登录和提交POST信息的多种方法(转)
网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...
- 二维卷积c代码
二维卷积c代码 二维信号的卷积原理请参考另外一篇文章:http://blog.csdn.net/carson2005/article/details/43702241 这里直接给出参考代码: void ...
- 【Bzoj 3295】 动态逆序对(树套树|CDQ分治)
[题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状 ...
- 【HDU 3435】 A new Graph Game (KM|费用流)
A new Graph Game Problem Description An undirected graph is a graph in which the nodes are connected ...