这道题呢看似复杂的要死,实则是一个蒟蒻题!
关键是题目要求字典序最小!!!
那么,
我们是不是应该尽量把左括号放在前面,因为他字典序更小!
我们分析一下思路:
当我们碰到一个左括号,sum就要++;
碰到右括号 ,因为需要一个左括号与它配对,则sum--;
当sum--时,若sum<0,需要额外加一个左括号,用l++并sum++。
最后,
for一遍1到l,输出l个左括号
再输出原字符串
for一遍1到r,输出r个左括号
下班!!!
#include<bits/stdc++.h>
#define debug(a); cout<<#a<<"="<<a<<endl;
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pep(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n;
int t;
int l;
string ch;
int main()
{
cin>>n;
cin>>ch;
rep(i,0,n-1)
{
if(ch[i]=='(') t++;
else if(ch[i]==')')
{
t--;
if(t<0) l++,t++;
}
}
rep(i,1,l) cout<<'(';
cout<<ch;
rep(i,1,t) cout<<')';
return 0;
}