括号序列 - 洛谷https://www.luogu.com.cn/problem/P1241
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <unordered_map>
#include <cmath>
#include <map>
#include <cctype>
#include <cstdlib>
#include <deque>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1000010;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
char s[MAXN];
bool vis[MAXN];
int main() {
scanf("%s", s + 1);
int n = strlen(s + 1);
//printf("%d", n);
for (int i = 1; i <= n; i++) {
if (s[i] == ')') {
for (int j = i - 1; j >= 1; j--) {
if (vis[j]) {
continue;
}
if (s[j] == '(') {
vis[j] = vis[i] = true;
break;
}
if (s[j] == '[') {
break;
}
}
} else if (s[i] == ']') {
for (int j = i - 1; j >= 1; j--) {
if (vis[j]) {
continue;
}
if (s[j] == '[') {
vis[i] = vis[j] = true;
break;
}
if (s[j] == '(') {
break;
}
}
}
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
if (s[i] == '(' || s[i] == ')') {
printf("()");
} else {
printf("[]");
}
} else {
printf("%c", s[i]);
}
}
return 0;
}