你```dfs```的递归部分写的不大对
```cpp
dfs(l, root - 1, x, x + root - l - 1);
dfs(root + 1, r, x + root - 1, y - 1);
```
这里的第二句扫描```b```数组的部分应该接着第一句后面扫,也就是扫描```(x + root - l - 1) + 1```=```x + root - l```
另外,```map```数组最好开成```int```型,加长到```30```,因为有26个大写字母,而且存入的是```1~n```。
于是乎,[$\textcolor{green}{AC}$代码](https://www.luogu.com.cn/record/122783575):
```cpp
#include <iostream>
#include <cstring>
using namespace std;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-')
f = -1;
ch = getchar();
}
while (isdigit(ch)) {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
inline void write(int x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
int n, map[28];
char a[9], b[9];
inline void dfs(int l, int r, int x, int y) {
if (l > r) return ;
putchar(b[y]);
int root = map[b[y] - 'A' + 1];
dfs(l, root - 1, x, x + root - l - 1);
dfs(root + 1, r, x + root - l, y - 1);
}
int main() {
scanf("%s%s", a + 1, b + 1);
n = strlen(a + 1);
for (int i = 1; i <= n; i ++ ) map[a[i] - 'A' + 1] = i;
dfs(1, n, 1, n);
putchar('\n');
return 0;
}
```
by wanglexi @ 2023-08-26 09:50:20
注意看清楚```l```(L)和```1```(one)
by wanglexi @ 2023-08-26 09:51:24