给你一个 n 和一个 k,再给你一个由括号组成的字符串,告诉你括号的数量一定是成对的。

你可以有若干次操作,数量不限,把字符串中的一段倒置。

问你如何操作能使字符串配成 k 个“正则括号”,即括号能组合成 k个整体。例如:()()()k等于 3 ;(()()())k等于 1 ;(()())()k等于 2 。


构造一个答案,然后如果原串和答案串不一样就往后找到第一个一样的,把这一段倒置,感觉很暴力的写法。。
int main()
{
    int t;cin>>t;
    while(t--)
    {
        int n,k;cin>>n>>k;
        string s,v="";
        cin>>s;
        rep(i,k-1) v+="()";
        int yu=(n-(int)v.size())/2;
        rep(i,yu) v+="(";  rep(i,yu) v+=")";
        vector<pii >ans;
        rep(i,n)
        {
            if(s[i]!=v[i])
            {
                for(int j=i+1;j<n;++j)
                {
                    if(s[j]==v[i])
                    {
                        ans.push_back(make_pair(i+1,j+1));
                        reverse(s.begin()+i,s.begin()+j+1);
                        break;
                    }
                }
            }
        }
        cout<<ans.size()<<endl;
        for(auto x: ans)
            cout<<x.first<<" "<<x.second<<endl;
    }
    //stop;
    return 0;
}