Description
给出一个括号序列,问是否通过在最右端加右括号把该括号序列变成一个合法的括号序列
Input
一个括号序列,长度不超过200000
Output
如果可以通过在最右端加右括号把该序列变成合法序列则输出合法序列,否则输出IMPOSSIBLE
Sample Input
(()
Sample Output
(())
Solution
统计左括号比右括号多的数量,如果该数量为负则IMPOSSIBLE,否则在序列右端加上对应数量的右括号即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 222222
char s[maxn];
int main()
{
while(~scanf("%s",s))
{
int n=strlen(s),num=0,gg=0;
for(int i=0;i<n;i++)
if(s[i]=='(')num++;
else
{
num--;
if(num<0)gg=1;
}
if(gg)printf("IMPOSSIBLE\n");
else
{
printf("%s",s);
for(int i=0;i<num;i++)printf(")");
printf("\n");
}
}
return 0;
}