MLE最后两个点求助

P1030 [NOIP2001 普及组] 求先序排列

你```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


|