#include<stdio.h>
#include<string.h>
#define LEN 30
int m;
char pre[LEN],post[LEN];
int outcome;
int compute(int n,int m){
int out=1,outd=1;
for(int i=0;i<m;i++){
out*=(n-i);
outd*=(i+1);
}
return out/outd;
}
void handle(int beginpr,int beginpo,int endpo){
char root=pre[beginpr];
int node=0,first=beginpr;
int i=beginpo,j=i;
while(true){//i
if(i>endpo)break;
for(;i<=endpo;i++){
if(root==post[i])break;
}
if(i!=j){
handle(first+1,j,i-1);
}
node++;
i++;
first=i-beginpo+beginpr;
root=pre[first];
j=i;
}
outcome*=compute(m,node);
}
int main(){
while(scanf("%d%s%s",&m,pre,post)!=EOF){
outcome=1;
int k=strlen(post);
handle(1,0,k-2);
printf("%d\n",outcome);
}
return 0;
}
/**************************************************************
Problem: 1044
User: cust123
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/
题目1044:Pre-Post
最新推荐文章于 2022-07-29 01:10:46 发布