一开始写了假算法,超时了。后来写了个全排列函数,然后,然后很神奇的就过了。。。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e6 + 100;
string str;
int len, arr[maxn];
bool check() {
stack<int> S;
for (int i = 0; i < len; i++) {
if (arr[i] == 0)
S.push(0);
else if (arr[i] == 1 && !S.empty())
S.pop();
else if (arr[i] == 1 && S.empty())
return false;
}
return true;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> str;
len = str.size();
for (int i = 0; i < len; i++) {
if (str[i] == '(')
arr[i] = 0;
else
arr[i] = 1;
}
prev_permutation(arr, arr + len);
while (check() == false)
prev_permutation(arr, arr + len);
for (int i = 0; i < len; i++) {
if (arr[i] == 0)
cout << "(";
else
cout << ")";
}
cout << endl;
for (int i = 0; i < len; i++) {
if (str[i] == '(')
arr[i] = 0;
else
arr[i] = 1;
}
next_permutation(arr, arr + len);
while (check() == false)
next_permutation(arr, arr + len);
for (int i = 0; i < len; i++) {
if (arr[i] == 0)
cout << "(";
else
cout << ")";
}
return 0;
}