经典的分治法。。
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <utility>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cctype>
#define CLEAR(a, b) memset(a, b, sizeof(a))
#define IN() freopen("in.txt", "r", stdin)
#define OUT() freopen("out.txt", "w", stdout)
#define LL long long
#define maxn 100005
#define maxm 1005
#define mod 1000000007
#define INF 1000000007
#define eps 1e-5
#define PI 3.1415926535898
#define N 26
using namespace std;
//-------------------------CHC------------------------------//
char pre[maxn], in[maxn], post[maxn];
void solve(int pos, int L1, int R1, int L2, int R2) {
if (R1 - L1 >= 1) {
post[pos] = pre[L1];
int root = find(in + L2, in + R2, pre[L1]) - in;
int left = root - L2, right = R2 - root - 1;
solve(pos - right - 1, L1 + 1, R1 - right, L2, L2 + left);
solve(pos - 1, R1 - right, R1, R2 - right, R2);
}
}
int main() {
while (~scanf("%s", pre)) {
scanf("%s", in);
int n = strlen(pre);
solve(n - 1, 0, n, 0, n);
for (int i = 0; i < n; ++i) putchar(post[i]);
putchar('\n');
}
return 0;
}