题解
2023-07-28 14:48:22
发布于:浙江
46阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int st[N], l[N], r[N], nxt[N], n, top;
char s[N];
set<string> t;
string getstr() {
string ans;
for (int i = r[0]; i; i = r[i]) ans.push_back(s[i]);
return ans;
}
inline void del(int x) { l[r[x]] = l[x], r[l[x]] = r[x]; }
inline void rem(int x) { r[l[x]] = x, l[r[x]] = x; }
void dfs(int step, int cnt) {
if (!step) {
if (cnt) t.insert(getstr());
return;
}
dfs(r[step], cnt);
if (s[step] == '(') del(step), del(nxt[step]), dfs(step + 1, cnt + 1), rem(nxt[step]), rem(step);
}
int main() {
scanf("%s", s + 1), n = strlen(s + 1);
for (int i = 1; i <= n; i++) {
if (s[i] == '(') st[++top] = i;
if (s[i] == ')') nxt[st[top--]] = i;
}
for (int i = 0; i <= n; i++) r[i] = i + 1, l[i + 1] = i;
r[n] = 0, l[0] = n, dfs(1, 0);
for (set<string>::iterator it = t.begin(); it != t.end(); it++) printf("%s\n", it->c_str());
return 0;
}
这里空空如也
有帮助,赞一个