题目链接:
好久之前自己写的,今天拿出来看看,越看越喜欢。题目意思,已知前序遍历跟后序遍历,求树共有多少种形态。前一篇随笔中提到了一点。
View Code
#include#include #include #include using namespace std;const int maxn=27;char s1[maxn],s2[maxn];int m,ans,pre;int zuhe(int cnt){ int count=1; for(int i=1;i<=cnt;i++) { count*=(m-i+1); count/=i; } return count;}void dfs(int beg,int end){ int cnt=0; for(int i=beg;i<=end;i++) { if(s2[i]==s1[pre]) { cnt++; pre++; dfs(beg,i-1); beg=i+1; } } ans*=zuhe(cnt);}int main(){ while(true) { scanf("%d %s %s",&m,s1,s2);// printf("%d %s %s\n",m,s1,s2); if(!m) break; int len=strlen(s1); ans=pre=1; dfs(0,len-2); printf("%d\n",ans); } return 0;}