传送门

一开始写了假算法,超时了。后来写了个全排列函数,然后,然后很神奇的就过了。。。

#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;
}