九度 题目1044:Pre-Post
转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571
题目链接: pid=1044">http://ac.jobdu.com/problem.php?pid=1044
这个题目的分析预计都被写烂了,我这里就简单的说明一下。事实上认为他们写了好多好多非常浅显的东西,希望我的分析可以给大家减轻点负担。尽管我也是看别人的分析之后才更加理解这个题目。
分析例如以下:
已知前序和后序,
1:我们先知道的,肯定是字符串第一个会等于最后一个
2:既然是m叉树。那么我们就要分析m叉树中有几个还有子树,然后我们就须要分析子树的由来。
3:子树中又有子树。这个就是组合数学中的一件事情分步完毕,则终于的组合为步步相乘。
所以问题的关键就在于我怎么知道子树的存在呢?
找子树的过程,把前一个字符串记为A,后一个记为B
先运行步骤1,即跳过第一个字符,A=A+1。
然后把取出A的第一个字符A[0]。在B中找,直到B[i]==A[0],就是一个子树
就分析以下最简单的两个吧
2 abc cba 4
2 abc bca 1
第一个,运行步骤1,剩下bc和cb,找完第一次就发现找完了。所以就仅仅有1个子树,然后再去对bc进行查找
第二个。运行步骤1,剩下bc和bc。找到两个子树
#include <stdio.h>
#include <string.h>
int result;
int Cal(int n,int m)//计算组合数,从n个中选m个;
{
if(m==n)
return 1;
else if (m==1)
return n;
else
return Cal(n-1,m)+Cal(n-1,m-1);
}
void Count(char *A,char *B,int num)
{
int n=strlen(A);
if(n==1)
return ;
A=A++;//忽略第一个;
B[n-1]='\0';//忽略最后一个;
int count=0;
while(*A)
{
int i=0;
char newA[27],newB[27];
while(A[0]!=B[i])
{
newA[i]=A[i];
newB[i]=B[i];
i++;
}
newA[i]=A[i];
newB[i]=B[i];
newA[i+1]='\0';
newB[i+1]='\0';
count++;//统计在当前这一层有多少个子树;
A=A+i+1;
B=B+i+1;
Count(newA,newB,num);
}
result=result*Cal(num,count);
} int main()
{
int n;
char A[27],B[27];
//freopen("data.in","r",stdin);
while(scanf("%d",&n)!=EOF)
{
scanf("%s%s",&A,&B);
result=1;
Count(A,B,n);
printf("%d\n",result);
}
}
九度 题目1044:Pre-Post的更多相关文章
- 九度OJ 1044:Pre-Post(先序后序) (n叉树、递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:701 解决:398 题目描述: We are all familiar with pre-order, in-order and post- ...
- 九度 题目1437:To Fill or Not to Fill
题目描述: With highways available, driving a car from Hangzhou to any other city is easy. But since the ...
- 九度 题目1421:Abor
转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...
- 九度-题目1203:IP地址
http://ac.jobdu.com/problem.php?pid=1203 题目描述: 输入一个ip地址串,判断是否合法. 输入: 输入的第一行包括一个整数n(1<=n<=500), ...
- 九度-题目1026:又一版 A+B
http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...
- 九度-题目1195:最长&最短文本
http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出 ...
- 九度 题目1154:Jungle Roads
题目描写叙述: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid mon ...
- 九度 题目1454:Piggy-Bank 完全背包
题目1454:Piggy-Bank 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1584 解决:742 题目描述: Before ACM can do anything, a budg ...
- 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面
题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2 ...
随机推荐
- uva 10069 Distinct Subsequences(高精度 + DP求解子串个数)
题目连接:10069 - Distinct Subsequences 题目大意:给出两个字符串x (lenth < 10000), z (lenth < 100), 求在x中有多少个z. ...
- oracle在desc表时,name 和type列不能格式化问题(占位过长)
今天玩Oracle的时候,遇到一个让人很无语的问题,我desc表的时候,总是发现name列和type 列占位太多, 无法很直观明白的显示出来各个列值,就像下面的样子: 这样让人很不舒服,当然,一看到列 ...
- 高级Bash脚本编程指南(27):文本处理命令(三)
高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...
- 为什么EXE文件出现了不该出现的“盾牌”
下载了一个小程序,它的功能并不需要管理员权限.但是在Win7下面它的图标上出现了一个“小盾牌”,这意味着运行它需要提升权限……果然,双击时弹出了UAC对话框.用二进制编辑器打开这个EXE,发现它没有内 ...
- 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚 如果自动提交模式被启用,在InnoDB里, 所有的用户活动发生在一个事务里, 每个SQL语句 ...
- Redis 学习笔记五 经常使用php函数
PHPRedis的安装在这里: http://blog.csdn.net/xundh/article/details/46288277 键值操作 $redis = new Redis(); $redi ...
- 指尖上的电商---(3)Solr全文搜索引擎的配置
接上篇,Solr的准备工作完毕后,本节主要介绍Solr的安装,事实上Solr不须要安装.直接下载就能够了 1.Solr配置 下载地址 :http://lucene.apache.org/so ...
- [Android学习笔记]View的draw过程学习
View从创建到显示到屏幕需要经历几个过程: measure -> layout -> draw measure过程:计算view所占屏幕大小layout过程:设置view在屏幕的位置dr ...
- VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器 View 传输服务器用于管理和简化数据中心与在最终用户本地系统上检出使用的 View 桌面之间的数据传输.必须安 ...
- Linux 利用hosts.deny 防止暴力破解ssh(转)
一.ssh暴力破解 利用专业的破解程序,配合密码字典.登陆用户名,尝试登陆服务器,来进行破解密码,此方法,虽慢,但却很有效果. 二.暴力破解演示 2.1.基础环境:2台linux主机(centos 7 ...