条件有 (1) 前i个字符中 (字符的数量不能少于)字符的数量 包括#替换之后!!!
(2)替换之后的字符串中 (字符的个数与)字符的个数相等
贪心的思路:
除了最后一个#字符之外 每个#字符替换一个) 最后一个#字符 来满足整个字符串中 (字符与)字符相等的条件
遇到一个(字符+1 遇到一个)字符 -1 #字符替换多少个)字符就减多少
每次循环判断 值是否小于0 是否满足条件(1)
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define INF 0x7fffffff
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
char ch[MAXN];
int num[MAXN];
int main()
{
//freopen("ceshi.txt","r",stdin);
while(scanf("%s",ch)!=EOF)
{
int a=0,b=0,c=0;
int len=strlen(ch);
int last;
for(int i=0;i<len;i++)
{
if(ch[i]=='(') a++;
if(ch[i]==')') b++;
if(ch[i]=='#')
{
c++;
last=i;
}
}
if(a<b+c)
{
puts("-1");
continue;
}
int n=0;
int flag=1;
for(int i=0;i<len;i++)
{
if(ch[i]=='(') n++;
if(ch[i]==')') n--;
if(ch[i]=='#')
{
if(i==last)
{
n-=a-(b+c-1);
}
else n--;
}
// cout<<i<<" "<<n<<endl;
if(n<0)
{
flag=0;
puts("-1");
break;
}
}
if(flag)
{
for(int i=1;i<c;i++)
puts("1");
printf("%d\n",a-(b+c-1));
}
}
return 0;
}