九度 题目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 ...
随机推荐
- CSS中float属性和clear属性的一些笔记
在学习CSS的最后一部分内容中,float属性和clear属性比较难以用语言描述,因此在笔记本中无法准确的记录这两个属性的用法.所以在博客园上以图文的形式记录这两种属性的特征,以备以后查阅. 首先,定 ...
- Please verify you invoked Maven from the correct directory
解决办法: 在cmd中,把当前路径转换到一个含有pom文件的 项目路径下 再使用 类似下面的deploy就行 mvn deploy:deploy-file -DgroupId=com.taobao.n ...
- mysql sql执行顺序
<pre name="code" class="html">mysql> explain select * from (select * fr ...
- java entry
我希望要一个ArrayList<Entry>,类似C++中的pair, 可是Map.Entry是个接口,不能实例化,能够像以下这样写 HashMap<Integer, Integer ...
- Mac OS X将CSV格式转换为Excel文档格式,Excel转CSV中文乱码问题
一:在Mac上假设你使用Excel打开windows导出的CSV格式文档.你会发现表格中全部的的内容都显示在A列. 那么,怎样恢复正常呢,你能够将CSV格式的文档导入到Excel文档中,这样就正常显示 ...
- Swift - 带结果列表的搜索条(UISearchDisplayController)的用法
(注:自iOS8起,苹果便废弃UISearchDisplayController的使用,改为使用UISearchController来实现类似功能,可参考我的另一篇文章“Swift - 使用UISea ...
- ListView数据动态刷新
在Android开发中用到ListView时,经常遇到要更改ListView内容的情形,比如删除或增加ListView中显示的条目,这里给大家提供一下思路:不论ListView要显示的对象是什么(如: ...
- VirtualBox集群建立和网络配置
安装 1. 安装 安装Oracle VM VirtualBox之后,新建一个虚拟机,制定好内存等信息,开始安装操作系统,这里安装ubuntu-12.04.2-desktop-i386版本. 2. 拷贝 ...
- URL加随机数的作用
原文:URL加随机数的作用 大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的时候总是使用IE缓存,为了解决这个问题一般可以用一下方法: 1 ...
- POJ3071-Football(概率DP+滚动数组)
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2769 Accepted: 1413 Descript ...