这题,我们发现题目的神仙操作实际上就是镜像翻转,对已经合法的括号序列不会产生影响。所以我们可以把合法的都无视,只留下形如")))))(((("的一堆东西,然后就很好操作了。

#include <bits/stdc++.h>
#define ll long long
#define fr(i,x,y) for(int i=x;i<=y;i++)
#define rf(i,x,y) for(int i=x;i>=y;i--)
using namespace std;
const int N=1002;
int n;
int L,st[N];

template<class T> void checkmin(T &a,const T &b) { if (b<a) a=b; } 
template<class T> void checkmax(T &a,const T &b) { if (b>a) a=b; }

class ParenthesesDiv1Easy {
public:
    vector <int> correct( string s ) ;
};
vector <int> ParenthesesDiv1Easy::correct(string s) {
    n=s.size();
    for(int i=0;i<n;i++)
     if (s[i]=='(') st[++L]=i;
      else{
      	if (s[st[L]]=='('&&L) L--;
      	 else st[++L]=i;
      }
    int cnt1=0,cnt2=0;
    fr(i,1,L) if (s[st[i]]=='(') cnt2++;else cnt1++;
    fr(i,1,L) cout<<st[i]<<' ';
    vector<int> ans;
    if (L==0) return ans;
    if (L&1) return {-1};
    if (cnt1&&cnt2){
    	ans.push_back(st[max(1,cnt1-cnt2+1)]);ans.push_back(st[cnt1]);
	    ans.push_back(st[cnt1+1]);ans.push_back(st[min(L,2*cnt1)]);
	}
    if (cnt1<cnt2) ans.push_back(st[L-(cnt2-cnt1)/2+1]),ans.push_back(st[L]);
    if (cnt1>cnt2) ans.push_back(st[1]),ans.push_back(st[(cnt1-cnt2)/2]);
    return ans;
}