卡特兰数:https://blog.csdn.net/wu_tongtong/article/details/78161211


https://www.luogu.org/problemnew/show/P1044

n的答案就是C[n]

证明的话,设n的答案为ans[n],只要考虑最后一个出栈的数(设为x),那么显然大于x的数在出栈序列中相邻,小于x的数在出栈序列中也相邻,所以这个x产生的贡献为ans[x]*ans[n-x-1];总答案ans[n]=ans[0]*ans[n-1]+ans[1]*ans[n-2]+...+ans[n-1]*ans[0]=C[n]


http://210.33.19.103/contest/985/problem/5

教授的测试

  转眼之间,新学期已经过去几个月了,F大学计算机系的W教授决定对他的学生进行一次测试。为了测试学生对树结构的认识,同时也检验他们的编程能力,教授把测试的内容定为:要求学生们编程按编号顺序打印出节点个数不少于m的所有二叉树。

  二叉树编号规则如下:

  仅有一个元素的树编号为1。

  当满足以下条件之一时,定义二叉树a的编号比b大:

    1. a的节点数比b多。

    2. 若a的节点数与b相等,且a的左子树编号比b的左子树大。

    3. a的节点数和左子树编号都和b相等,且a的右子树编号比b的右子树大。

  二叉树的元素用大写X表示。

  例如:

  打印二叉树的格式为:

  ( 左子树 ){若左子树为空,则省略} X{根} ( 右子树 ){若右子树为空,则省略}

  例如在上图中,编号为2 的树可表示为:X(X);

         编号为3 的树可表示为:(X)X;

         编号为5 的树可表示为:X((X)X);

  当然当m较大时,检验答案对错的工作也是很繁重的,所以教授只打算对其中的若干个编号的二叉树进行抽查,他想麻烦你在测试开始前把标准答案先准备好(教授的测试卷会事先交给你)。

输入格式:

  输入文件为教授的测试卷,至少1行,至多10行,每行一个数N(1<=N<=10^8),即要抽查的二叉树的编号,以零结束。

输出格式:

  输出文件是你求出的标准答案,对每一个编号输出其对应的二叉树,每个二叉树占一行,零不用输出。

样例输入:

2
5
0

样例输出:

X(X)
X((X)X)

数据范围:

1<=N<=10^8

时间限制:

1000

空间限制:

65536

这回的卡特兰数比较显然,但是实现有一些复杂?

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. #include<string>
  6. using namespace std;
  7. #define fi first
  8. #define se second
  9. #define mp make_pair
  10. #define pb push_back
  11. typedef long long ll;
  12. typedef unsigned long long ull;
  13. typedef pair<int,int> pii;
  14.  
  15. ll f[],g[];
  16. ll m,n;
  17. void dfs(ll n,ll k)
  18. {
  19. //if(n==0) return "";
  20. ll tt=,tn=;
  21. while(tt+f[tn]*f[n-tn-]<=k-) tt+=f[tn]*f[n-tn-],tn++;
  22. if(tn) putchar('('),dfs(tn,(k-tt-)/f[n-tn-]+),putchar(')');
  23. putchar('X');
  24. if(n-tn-) putchar('('),dfs(n-tn-,(k-tt-)%f[n-tn-]+),putchar(')');
  25. }
  26. int main()
  27. {
  28. ll i,j;
  29. f[]=;
  30. for(i=;i<=;i++)
  31. {
  32. for(j=;j<i;j++)
  33. {
  34. f[i]+=f[j]*f[i-j-];
  35. }
  36. }
  37. g[]=f[];
  38. for(i=;i<=;i++) g[i]=f[i]+g[i-];
  39. while()
  40. {
  41. scanf("%lld",&n);
  42. if(n==) break;
  43. m=;
  44. while(g[m+]<=n-) m++;
  45. m++;
  46. dfs(m,n-g[m-]);
  47. puts("");
  48. }
  49. return ;
  50. }

栈 && 教授的测试的更多相关文章

  1. FZU 1064 教授的测试(卡特兰数,递归)

    Problem 1064 教授的测试 Accept: 149 Submit: 364 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Des ...

  2. FZU 1064 教授的测试

    递归构造答案. 根据当前整颗树的编号,可以计算左右子树有几个节点以及编号.因此,不断dfs下去就可以了. #include<cstdio> #include<cstring> ...

  3. JZYZOJ1237 教授的测试 dfs

    http://172.20.6.3/Problem_Show.asp?id=1237   锻炼搜索的代码能力,不错的题. 开始对dfs到底向下传递什么搞不清楚,需要想一下,noip难度的题还有这种情况 ...

  4. 栈空间默认1M,测试存进数据时间

    #include <stdio.h> 栈空间是1024*1024,一兆1M,其中包含了进入main函数之前的1万左右空间.全空间是足的.速度:栈>全局>堆 测试运算时间.100 ...

  5. 数据结构图文解析之:栈的简介及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  6. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  7. Python3 栈的实现

    这篇博客主要记录我在学习python算法时实现栈的过程,这里栈的实现只是最简单的实现,其中也包括符号匹配,前缀.中缀以及后缀表达式的实例.参考书目为: problem-solving-with-alg ...

  8. Java实现栈数据结构

    栈(英语:stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端(称为堆栈顶端指针,英语:top)进行加入数据(英语:push)和输出数据 ...

  9. 【Java】 剑指offer(30) 包含min函数的栈

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...

随机推荐

  1. netstat 参数

    Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况. NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] ...

  2. gitblit安装使用

    1.下载地址 http://www.gitblit.com/ 2.安装jdk(自行安装) 3.解压gitblit # tar -zxvf gitblit-1.8.0.tar.gz 4.配置# cd g ...

  3. swoole_http_server客户端测试

    测试方法: http_server.php 文件内容 <?php // use Swoole\Http\Server; // $http = new Server("0.0.0.0&q ...

  4. 端口扫描程序nmap使用手册

        其实还是建议看英文的man,对以后学习其他东西很有帮助的:) 摘要 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等 ...

  5. shell---rpm

    [root@master src]# rpm -qpl epel-release-latest-6.noarch.rpm         ##查询该rpm包安装了什么warning: epel-rel ...

  6. Linux下启动mongodb

    完成安装mongodb(略) 创建数据目录: # mkdir /data/mongo 创建配置文件 # vi /data/mongo/mongodb.cnf dbpath=/data/mongo/ l ...

  7. Dubbo原理与框架设计

    Dubbo是常用的开源服务治理型RPC框架,在之前osgi框架下不同bundle之间的方法调用时用到过.其工作原理和框架设计值得开源技术爱好者学习和研究. 一.Dubbo的工作原理 调用关系说明 服务 ...

  8. hibernate 中的拦截器EmptyInterceptor接口功能

    Interceptor接口提供了从会话(session)回调(callback)应用程序(application)的机制, 这种回调机制可以允许应用程序在持久化对象被保存.更新.删除或是加载之前,检查 ...

  9. cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示

    今天遇到一个问题: 一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在. 在脚本最上方,程序如下: #!/usr/local/bin p ...

  10. web开发并部署到Tomcat上

    1. eclipse配置tomcat https://jingyan.baidu.com/article/e4d08ffdabb0710fd2f60de9.html https://blog.csdn ...