难题,大佬的思路很牛逼
大佬思路
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int dp[25][25];
string s1, s2;
int solve(string pre, string post){
int sum = 1, num = 0, k = 0;
pre.erase(pre.begin());
post.pop_back();
while(k < pre.length()){
for(int i = 0; i < post.length(); i ++ ){
if(pre[k] == post[i]){
num ++ ;
sum *= solve(pre.substr(k, i - k + 1), post.substr(k, i - k + 1));
k = i + 1;
break;
}
}
}
return sum * dp[n][num];
}
signed main()
{
dp[0][0] = 1;
for(int i = 1; i < 23; i ++ ){
dp[i][0] = 1;
for(int j = 0; j < i; j ++ ){
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
}
dp[i][i] = 1;
}
while(cin>>n && n){
cin>>s1>>s2;
cout<<solve(s1, s2)<<endl;
}
return 0;
}