题目链接

中间计算的各种细节。有的细节没处理好,就wa了。。。主要思路就是根据卡特兰数列的:

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)

  1. #include <cstdio>
  2. #include <string>
  3. #include <cstring>
  4. #include <queue>
  5. #include <map>
  6. #include <iostream>
  7. #include <algorithm>
  8. using namespace std;
  9. #define LL __int64
  10. LL ctl[];
  11. LL sum[];
  12. struct node
  13. {
  14. int l,r;
  15. }tree[];
  16. int t;
  17. void build(LL n,int rt)
  18. {
  19. int i,pos;
  20. if(n == ||n == )
  21. {
  22. return ;
  23. }
  24. for(i = ;i <= ;i ++)
  25. {
  26. if(sum[i] >= n)
  27. break;
  28. }
  29. pos = i;
  30. n -= sum[pos-];
  31. for(i = ;i <= pos-;i ++)
  32. {
  33. if(n <= ctl[i]*ctl[pos--i])
  34. break;
  35. n -= ctl[i]*ctl[pos--i];
  36. }
  37. if(i != )
  38. {
  39. tree[rt].l = t ++;
  40. if(n%ctl[pos--i] != )
  41. build(sum[i-]+n/ctl[pos--i]+,t-);
  42. else
  43. build(sum[i-]+n/ctl[pos--i],t-);
  44. }
  45. if(i != pos-)
  46. {
  47. tree[rt].r = t ++;
  48. if(n%ctl[pos--i] == )
  49. build(sum[pos--i]+ctl[pos--i],t-);
  50. else
  51. build(sum[pos--i]+n%ctl[pos--i],t-);
  52. }
  53. }
  54. void show(int x)
  55. {
  56. if(x == -)
  57. return ;
  58. if(tree[x].l != -)
  59. printf("(");
  60. show(tree[x].l);
  61. if(tree[x].l != -)
  62. printf(")");
  63. printf("X");
  64. if(tree[x].r != -)
  65. printf("(");
  66. show(tree[x].r);
  67. if(tree[x].r != -)
  68. printf(")");
  69.  
  70. }
  71. int main()
  72. {
  73. int i;
  74. LL n;
  75. ctl[] = ;
  76. ctl[] = ;
  77. sum[] = ;
  78. for(i = ;i <= ;i ++)
  79. {
  80. ctl[i] = ctl[i-]*(*i-)/(i+);
  81. sum[i] = sum[i-] + ctl[i];
  82. }
  83. while(cin>>n)
  84. {
  85. if(n == ) break;
  86. t = ;
  87. for(i = ;i <= ;i ++)
  88. tree[i].l = tree[i].r = -;
  89. build(n,);
  90. show();
  91. printf("\n");
  92. }
  93. return ;
  94. }

POJ 1095 Trees Made to Order(卡特兰数列)的更多相关文章

  1. poj 1095 Trees Made to Order 卡特兰数

    这题用到了卡特兰数,详情见:http://www.cnblogs.com/jackge/archive/2013/05/19/3086519.html 解体思路详见:http://blog.csdn. ...

  2. POJ 1095 Trees Made to Order 最详细的解题报告

    题目来源:Trees Made to Order 题目大意:根据下面的规则给一棵二叉树编号: 规则1:如果二叉树为空,则编号为0: 规则2:如果二叉树只有一个节点,则编号为1: 规则3:所有含有m个节 ...

  3. poj 1095 Trees Made to Order

    http://poj.org/problem?id=1095 先求出n个节点数的二叉树的形态有多少种.卡特兰数f[n]=f[n-1]*(4*n-2)/(n+1);再递归求. #include < ...

  4. Trees Made to Order——Catalan数和递归

    Trees Made to Order Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7155   Accepted: 40 ...

  5. 「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)

    「BZOJ1485」[HNOI2009] 有趣的数列   Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai ...

  6. poj 1095 题解(卡特兰数+递归

    题目 题意:给出一个二叉树的编号,问形态. 编号依据 1:如果二叉树为空,则编号为0: 2:如果二叉树只有一个节点,则编号为1: 3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编 ...

  7. HDU.P1100 Trees Made to Order 解题报告

    http://www.cnblogs.com/keam37/p/3637717.html  keam所有 转载请注明出处 Problem Description We can number binar ...

  8. POJ 2084 Game of Connections(卡特兰数)

    卡特兰数源于组合数学,ACM中比较具体的使用例子有,1括号匹配的种数.2在栈中的自然数出栈的种数.3求多边形内三角形的个数.4,n个数围城圆圈,找不相交线段的个数.5给定n个数,求组成二叉树的种数…… ...

  9. POJ 1095

    #include <iostream> #define MAXN 20 using namespace std; __int64 cat[MAXN]; int sum; void give ...

随机推荐

  1. 【Spring】Spring系列2之bean的配置

    2.bean的配置 2.1.IOC概述 2.2.bean的获取 2.3.依赖注入方式 2.4.属性注入细节 内部bean,不需要ID,ID无效,外部不能引用: 2.5.集合属性注入 2.6.使用p命名 ...

  2. UML基础:统一建模语言简介

    目录 背景知识 用例图 类图 序列图 状态图 活动图 组件图 部署图 结束语 英文原文:UML basics: An introduction to the Unified Modeling Lang ...

  3. mysql update case when和where之间的注意事项

    在日常开发中由于业务逻辑较为复杂,常常需要用到UPDATE和CASE...WHEN...THEN...ELSE...END一起做一些复杂的更新.有时候因为对这几个字句理解得不透彻会带来很大的困扰.因此 ...

  4. 如何用ndk-stack察看android崩溃堆栈

    前提:要打开eclipse的LogCat窗口 1.保存log,先要选中eclipse的LogCat的所有行,点击保存,假设保存到了/User/mac/Desktop/log.txt 2.找到你的so( ...

  5. Android 和iOS 创建本地通知

    1 Android 中的发送本地通知的逻辑如下 先实例化Notification.Builder,再用builder创建出具体的Notification,创建时要指定好启动用的PendingInten ...

  6. Greedy:Yogurt factory(POJ 2393)

    酸奶工厂 题目大意:酸奶工厂每个星期都要制造酸奶,成本每单位x,然后每个星期要生产y,然后酸奶厂有个巨大的储存室,可以无限储存酸奶,而且酸奶的品质不会变坏,每天储存要每单位花费S,求最小的成本. 简直 ...

  7. project.json

    概述 项目相关配置,由原来的cocos2d.js中转移到project.json中,该文件需要与index.html同级,一般建议放在根目录下. 字段说明 debugMode 相当于原来的COCOS2 ...

  8. POJ 2478 Farey Sequence(欧拉函数前n项和)

    A - Farey Sequence Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  9. MFC中挂起线程和恢复线程

    DWORD SuspendThread ( HANDLE hThread );   //挂起线程DWORD ResumeThread ( HANDLE hThread );   //恢复线程 比如说我 ...

  10. Nginx+Keepalived主从双机热备+自动切换

    1 安装配置nginx 参考: http://www.cnblogs.com/jager/p/4388202.html 2 安装配置keepalived tar xvf keepalived-1.2. ...