#include <bits/stdc++.h> using namespace std; char ss1[30],ss2[30],ss3[30]; void pro(int l1,int r1,int l2,int r2,int l3,int r3){//递归,l1,r1表示一颗完整的子树在ss1中应占的位置,其他类似,SS1为前序 ss3[r3] = ss1[l1]; if(l1 == r1||l2 == r2||l3 == r3) return ; for(int i = l2;i <= r2;i++){ if(ss2[i] == ss1[l1]){ if(i == l2) pro(l1+1,r1,i+1,r2,l3,r3-1); else if(i == r2) pro(l1+1,r1,l2,r2-1,l3,r3-1); else{ int numl = i - l2,numr =r2 - i; pro(l1+1,l1+i-l2,l2,i-1,l3,i-l2+l3-1); pro(l1+i-l2+1,r1,i+1,r2,i-l2+l3,r3-1); } } } } int main() { // freopen("in.txt","r",stdin); while(~scanf("%s",ss1)){ scanf("%s",ss2); int l = strlen(ss1); pro(0,l-1,0,l-1,0,l-1); for(int i = 0;i < l;i++) printf("%c",ss3[i]); cout<<endl; } return 0; }
老实说有点虚,不知道是不是对的,不过既然A了就留下来以后再试试,,,