栈 && 教授的测试
卡特兰数: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
这回的卡特兰数比较显然,但是实现有一些复杂?
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii; ll f[],g[];
ll m,n;
void dfs(ll n,ll k)
{
//if(n==0) return "";
ll tt=,tn=;
while(tt+f[tn]*f[n-tn-]<=k-) tt+=f[tn]*f[n-tn-],tn++;
if(tn) putchar('('),dfs(tn,(k-tt-)/f[n-tn-]+),putchar(')');
putchar('X');
if(n-tn-) putchar('('),dfs(n-tn-,(k-tt-)%f[n-tn-]+),putchar(')');
}
int main()
{
ll i,j;
f[]=;
for(i=;i<=;i++)
{
for(j=;j<i;j++)
{
f[i]+=f[j]*f[i-j-];
}
}
g[]=f[];
for(i=;i<=;i++) g[i]=f[i]+g[i-];
while()
{
scanf("%lld",&n);
if(n==) break;
m=;
while(g[m+]<=n-) m++;
m++;
dfs(m,n-g[m-]);
puts("");
}
return ;
}
栈 && 教授的测试的更多相关文章
- FZU 1064 教授的测试(卡特兰数,递归)
Problem 1064 教授的测试 Accept: 149 Submit: 364 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Des ...
- FZU 1064 教授的测试
递归构造答案. 根据当前整颗树的编号,可以计算左右子树有几个节点以及编号.因此,不断dfs下去就可以了. #include<cstdio> #include<cstring> ...
- JZYZOJ1237 教授的测试 dfs
http://172.20.6.3/Problem_Show.asp?id=1237 锻炼搜索的代码能力,不错的题. 开始对dfs到底向下传递什么搞不清楚,需要想一下,noip难度的题还有这种情况 ...
- 栈空间默认1M,测试存进数据时间
#include <stdio.h> 栈空间是1024*1024,一兆1M,其中包含了进入main函数之前的1万左右空间.全空间是足的.速度:栈>全局>堆 测试运算时间.100 ...
- 数据结构图文解析之:栈的简介及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...
- Python3 栈的实现
这篇博客主要记录我在学习python算法时实现栈的过程,这里栈的实现只是最简单的实现,其中也包括符号匹配,前缀.中缀以及后缀表达式的实例.参考书目为: problem-solving-with-alg ...
- Java实现栈数据结构
栈(英语:stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端(称为堆栈顶端指针,英语:top)进行加入数据(英语:push)和输出数据 ...
- 【Java】 剑指offer(30) 包含min函数的栈
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min ...
随机推荐
- mac安装python3
http://www.jianshu.com/p/51811fa24752 brew install python3 安装路径:/usr/local/Cellar 使用: 执行python3即可 配置 ...
- BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典:dp【删字符最少】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1633 题意: 给你一个长度为n的主串a,和一个有m个字符串s[i]的单词书(s[i].si ...
- 关于C语言声明数组时省略长度
C语言在声明数组时必须明确长度,如下两种方式: (一) 直接指定长度.如: int a[5]; (二) 声明时初始化元素.如:int a[]={1,3,5}. 如果,直接int a[]; 是不可以的 ...
- vmware tools for linux 安装
Linux VMware Tools安装步骤简易版 Linux VMware Tools安装估计有点困难,我也在网上看了好多版本的Linux安装VMware Tools,方法都一样.但是自己在安装过程 ...
- cogs1070玻璃球游戏
1070. [焦作一中2012] 玻璃球游戏 ★ 输入文件:marbles.in 输出文件:marbles.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 小x ...
- hihoCoder2月29日(字符串模拟)
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: ...
- android 自动生成jni C语言头文件
1. 在类里面申明 public native xxx(); 函数接口2. 在安卓工程src目录下 使用命令 javah 包名.类名 生成该类所申明的c语言接口
- linux下监控用户的操作记录---录像播放性质
想知道用户登陆系统后都操作了什么,怎么办? 别急,linux下有一个script工具,专门记录终端会话中所有输入输出结果,并存放到指定文件中. 先看看怎么录制吧! 1.创建日志存放目录 # mkdir ...
- Bayesian 网络分类算法
1:贝叶斯网络的定义和性质 一个贝叶斯网络定义包括一个有向无环图(DAG)和一个条件概率表集合.DAG中每一个节点表示一个随机变量,可以是可直接观测变量或隐藏变量,而有向边表示随机变量间的条件依赖:条 ...
- TimeUtils(没试过)
package util; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.ParseExc ...