转载请注明本文链接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的更多相关文章

  1. 九度OJ 1044:Pre-Post(先序后序) (n叉树、递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:701 解决:398 题目描述: We are all familiar with pre-order, in-order and post- ...

  2. 九度 题目1437:To Fill or Not to Fill

    题目描述: With highways available, driving a car from Hangzhou to any other city is easy. But since the ...

  3. 九度 题目1421:Abor

    转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...

  4. 九度-题目1203:IP地址

    http://ac.jobdu.com/problem.php?pid=1203 题目描述: 输入一个ip地址串,判断是否合法. 输入: 输入的第一行包括一个整数n(1<=n<=500), ...

  5. 九度-题目1026:又一版 A+B

    http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...

  6. 九度-题目1195:最长&最短文本

    http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出 ...

  7. 九度 题目1154:Jungle Roads

    题目描写叙述: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid mon ...

  8. 九度 题目1454:Piggy-Bank 完全背包

    题目1454:Piggy-Bank 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1584 解决:742 题目描述: Before ACM can do anything, a budg ...

  9. 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面

    题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2 ...

随机推荐

  1. mysql5.6 主从配置

    参考网址:http://www.cnblogs.com/zhoujie/p/mysql1.html http://kerry.blog.51cto.com/172631/277414/ 1.配置主库: ...

  2. 向大家推荐个android的游戏引擎——cocos2d-x

    最近发现单单用android自带的功能函数来编写游戏,往往有很大的局限性,即耗时长,调试繁琐,没有一定的框架.所以博主发现了游戏引擎这个好东西,游戏引擎所拥有的架构和功能函数,使得游戏的编写更加得心应 ...

  3. Linux多线程编程的时候怎么查看一个进程中的某个线程是否存活

    pthread_kill: 别被名字吓到,pthread_kill可不是kill,而是向线程发送signal.还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用sig ...

  4. 【虚拟化实战】容灾设计之三Stretched Cluster

    作者:范军 (Frank Fan) 新浪微博:@frankfan7 Stretched Cluster是一把双刃剑,会用的如行云流水,用不好反而受其限制. 传统的vSphere Cluster是指一个 ...

  5. Swift 可展开可收缩的表视图

    主要学习与运行效果 在本节的内容中,我们将通过一个具体实例的实现过程,详细讲解在表视图当中,如何创建一个可展开可收缩的表视图.为了让读者有着更为直观的印象,我们将通过模仿QQ好友列表来实现这个效果. ...

  6. How do I create a zip file?(转)

    Creating a zip file is a task that can easily be accomplished by using the classes ZipOutputStream a ...

  7. Android---OpenGL ES之添加动作

    本文译自:http://developer.android.com/training/graphics/opengl/motion.html 在屏幕上绘制对象是OpenGL的最基本功能,你可以使用其他 ...

  8. 数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree

    一. 序言 上一篇文章中,给出了 trie 树的一个实现. 能够看到,trie 树有一个巨大的弊病,内存占用过大. 本文给出还有一种数据结构来解决上述问题---- Ternary Search Tre ...

  9. iOS:点击button卡死

    场景:      在tableView的Cell中有一个button,我须要点击这个button然后使得其视图控制器上的一个视图改变frame,可是我点击这个button后,导致卡死,也不崩溃.所有事 ...

  10. Cocos2d-x串算出Size方法

    项目需要,根据所输入的字符串,的需要计算串帐户Size. 包代码如下面.只需要传递一个字符串,您可以返回Size: Size ChartDemoScene::calculateFontSize(con ...